SHA1摘要算法(带示例)

2024-08-28 03:32
文章标签 算法 示例 摘要 sha1

本文主要是介绍SHA1摘要算法(带示例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原创不易,转载请注明出处。

目录

1.算法简介

2.符号

3.加密算法流程

3.1 概述

3.2 填充

3.3 加密处理

附录A 运算示例

附录B 下载链接


 

1.算法简介

SHA英文全称Secure Hash Algorithm,即安全散列算法。散列算法又称杂凑算法或哈希算法,能将一定长度的消息计算出固定长度的字符串(又称消息摘要)。SHA包含5个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384和SHA-512,后四者并称为SHA-2。

SHA-1最大计算明文长度为2^64bit,属于分组算法,分组长度为512bit,产生的信息摘要长度为160bit。

SHA-1算法属于杂凑算法,原则上不能通过密文推出明文。但SHA-1的安全性如今被密码学家严重质疑。我国国家密码管理局于2017年4月3日发布《关于使用SHA-1密码算法的风险提示》的通知,目前杂凑算法使用国密SM3杂凑算法,代替SHA系列算法。

本文将通过实例,详细介绍SHA-1加密算法的加密流程。

2.符号

下列符号适用于本文本。

abcde:5个32bit字,迭代过程中使用

ABCDE:5个32bit字,迭代初始值

m:消息

m':填充后的消息

mod:模运算

Mt:每组消息的第t个32比特字

Wt:第t个子明文,32比特字

∧:32bit与运算

∨:32bit或运算

⊕:异或运算

<<<k:循环左移k比特运算

←:左向赋值运算符

3.加密算法流程

3.1 概述

对长度为l (l<2^64bit )比特的消息 m,SHA-1杂凑算法经过填充和迭代压缩,生成杂凑值,杂凑值长度为160比特。

3.2 填充

假设消息 m的长度为 比特。首先将比特“1”添加到消息的末尾,再添加 k个“0”, k是满足l+1+k=448mod512 的最小的非负整数。然后再添加一个64位比特串,该比特串是长度l 的二进制表示。填充后的消息 m'的比特长度为512的倍数。

例如:对消息01100001 01100010 01100011,其长度 =24,经填充得到比特串:

                  

事实上,在编写程序时,应该先进行分组,对满足512bit的分组先进行计算。当分到最后一组不足512bit时,再进行填充。

3.3 加密处理

将填充后的消息m' 按512比特进行分组:m'=B0B1……Bn-1

其中n=(l+k+65)/512 。

对每一个分组按下列方式迭代:

1)首先按照如下伪代码得到80个子明文:

FOR t=0 TO t=15Wt←MtENDFOR
FOR t=16 TO t=79Wt←(Wt ⊕Wt ⊕Wt ⊕Wt)<<<1
ENDFOR

Mt(0≤t≤15)是将分组512bit分成16个32bit字,Wt (0≤t≤79)是生成的80个子明文。

2)接下来进行80次迭代,分为4组,每组20次。在80次迭代过程中,需要用到常数K和逻辑函数ft(b,c,d)。迭代次数不同,所取的常数K和逻辑函数ft(b,c,d)也不相同,如表3-1所示。

表3-1 常数K和逻辑函数ft(b,c,d)

t次迭代

常数K取值

逻辑函数ft(b,c,d)

0≤t≤19

0x5A827999

ft(b,c,d)=(b∧c) ∨(~b∧d)

20≤t≤39

0x6ED9EBA1

ft(b,c,d)=b⊕c⊕d

40≤t≤59

0x8F1BBCDC

ft(b,c,d)=(b∧c) ∨(b∧d) ∨(c∧d)

60≤t≤79

0xCA62C1D6

ft(b,c,d)=b⊕c⊕d

迭代初始值:A=0x67452301;B=0xEFCDAB89;C=0x98BADCFE;D=0x10325476;E=0xC3D2E1F0。

具体迭代步骤伪代码如下:

a←A
b←B
c←C
d←D
e←E
FOR t=0 TO t=79e←dd←cc←b<<<30b←aa←(a<<<5)+e+Wt+Kt+ft(b,c,d)
ENDFOR
A←A+a
B←B+b
C←C+c
D←D+d
E←E+e

注意前一组得到的ABCDE作为下一分组的初始值,最终得到的ABCDE就是160bit杂凑值

附录A 运算示例

原始输入消息:

abc

填充后消息:

0x61      0x62      0x63      0x80      0x00      0x00      0x00      0x00

0x00      0x00      0x00      0x00      0x00      0x00      0x00      0x00

0x00      0x00      0x00      0x00      0x00      0x00      0x00      0x00

0x00      0x00      0x00      0x00      0x00      0x00      0x00      0x00

0x00      0x00      0x00      0x00      0x00      0x00      0x00      0x00

0x00      0x00      0x00      0x00      0x00      0x00      0x00      0x00

0x00      0x00      0x00      0x00      0x00      0x00      0x00      0x00

0x00      0x00      0x00      0x00      0x00      0x00      0x00      0x18

80个子明文

W0~W3:0x61626380      0x00000000        0x00000000        0x00000000

W4~W7:0x00000000      0x00000000        0x00000000        0x00000000

W8~W11:0x00000000     0x00000000        0x00000000        0x00000000

W12~W15:0x00000000   0x00000000        0x00000000        0x00000018

W16~W19:0xc2c4c700    0x00000000        0x00000030        0x85898e01

W20~W23:0x00000000   0x00000060        0x0b131c03        0x00000030

W24~W27:0x85898ec1    0x16263806        0x00000000        0x00000180

W28~W31:0x2c4c700c    0x000000f0         0x93afb507         0x5898e048

W32~W35:0x8e9a9202    0x00000600        0xb131c0f0         0x16263bc6

W36~W39:0x4ebed41e    0x626380a1        0x16263806        0x000018c0

W40~W43:0xd2e138c4    0x00000f00         0x3afb5079         0x898e04e5

W44~W47:0xe2ba3c2b    0x000060c0        0x053a37cd        0x74458547

W48~W51:0xda9415ed   0x26380a16        0x626383a1        0x4ebf54de

W52~W55:0x3835b44b   0x0000f600         0x1e84c7a3         0x98e04d98

W56~W59:0x651d16a0   0x62658ca1         0x458544d6        0x44584cb7

W60~W63:0x7ba06619    0x6380aea2         0x0ae55269         0x627b49a1

W64~W67:0x7cd45c9d   0x000f0000         0xfb50753a         0xec6765e8

W68~W71:0xba3c2be2    0x0060c000        0x3a37cd05        0x458546f4

W72~W75:0xb8599dd6   0x380a1a26         0x01e02203        0xe7cc3456

W76~W79:0xe6e60b69    0x00f60a00         0x5795ef4f         0x822e0879

80轮迭代

轮数

a

b

c

d

e

0

0x67452301

0xefcdab89

0x98badcfe

0x10325476

0xc3d2e1f0

1

0x0116fc33

0x67452301

0x7bf36ae2

0x98badcfe

0x10325476

2

0x8990536d

0x0116fc33

0x59d148c0

0x7bf36ae2

0x98badcfe

3

0xa1390f08

0x8990536d

0xc045bf0c

0x59d148c0

0x7bf36ae2

4

0xcdd8e11b

0xa1390f08

0x626414db

0xc045bf0c

0x59d148c0

5

0xcfd499de

0xcdd8e11b

0x284e43c2

0x626414db

0xc045bf0c

6

0x3fc7ca40

0xcfd499de

0xf3763846

0x284e43c2

0x626414db

7

0x993e30c1

0x3fc7ca40

0xb3f52677

0xf3763846

0x284e43c2

8

0x9e8c07d4

0x993e30c1

0x0ff1f290

0xb3f52677

0xf3763846

9

0x4b6ae328

0x9e8c07d4

0x664f8c30

0x0ff1f290

0xb3f52677

10

0x8351f929

0x4b6ae328

0x27a301f5

0x664f8c30

0x0ff1f290

11

0xfbda9e89

0x8351f929

0x12dab8ca

0x27a301f5

0x664f8c30

12

0x63188fe4

0xfbda9e89

0x60d47e4a

0x12dab8ca

0x27a301f5

13

0x4607b664

0x63188fe4

0x7ef6a7a2

0x60d47e4a

0x12dab8ca

14

0x9128f695

0x4607b664

0x18c623f9

0x7ef6a7a2

0x60d47e4a

15

0x196bee77

0x9128f695

0x1181ed99

0x18c623f9

0x7ef6a7a2

16

0x20bdd62f

0x196bee77

0x644a3da5

0x1181ed99

0x18c623f9

17

0x4e925823

0x20bdd62f

0xc65afb9d

0x644a3da5

0x1181ed99

18

0x82aa6728

0x4e925823

0xc82f758b

0xc65afb9d

0x644a3da5

19

0xdc64901d

0x82aa6728

0xd3a49608

0xc82f758b

0xc65afb9d

20

0xfd9e1d7d

0xdc64901d

0x20aa99ca

0xd3a49608

0xc82f758b

21

0x1a37b0ca

0xfd9e1d7d

0x77192407

0x20aa99ca

0xd3a49608

22

0x33a23bfc

0x1a37b0ca

0x7f67875f

0x77192407

0x20aa99ca

23

0x21283486

0x33a23bfc

0x868dec32

0x7f67875f

0x77192407

24

0xd541f12d

0x21283486

0x0ce88eff

0x868dec32

0x7f67875f

25

0xc7567dc6

0xd541f12d

0x884a0d21

0x0ce88eff

0x868dec32

26

0x48413ba4

0xc7567dc6

0x75507c4b

0x884a0d21

0x0ce88eff

27

0xbe35fbd5

0x48413ba4

0xb1d59f71

0x75507c4b

0x884a0d21

28

0x4aa84d97

0xbe35fbd5

0x12104ee9

0xb1d59f71

0x75507c4b

29

0x8370b52e

0x4aa84d97

0x6f8d7ef5

0x12104ee9

0xb1d59f71

30

0xc5fbaf5d

0x8370b52e

0xd2aa1365

0x6f8d7ef5

0x12104ee9

31

0x1267b407

0xc5fbaf5d

0xa0dc2d4b

0xd2aa1365

0x6f8d7ef5

32

0x3b845d33

0x1267b407

0x717eebd7

0xa0dc2d4b

0xd2aa1365

33

0x046faa0a

0x3b845d33

0xc499ed01

0x717eebd7

0xa0dc2d4b

34

0x2c0ebc11

0x046faa0a

0xcee1174c

0xc499ed01

0x717eebd7

35

0x21796ad4

0x2c0ebc11

0x811bea82

0xcee1174c

0xc499ed01

36

0xdcbbb0cb

0x21796ad4

0x4b03af04

0x811bea82

0xcee1174c

37

0x0f511fd8

0xdcbbb0cb

0x085e5ab5

0x4b03af04

0x811bea82

38

0xdc63973f

0x0f511fd8

0xf72eec32

0x085e5ab5

0x4b03af04

39

0x4c986405

0xdc63973f

0x03d447f6

0xf72eec32

0x085e5ab5

40

0x32de1cba

0x4c986405

0xf718e5cf

0x03d447f6

0xf72eec32

41

0xfc87dedf

0x32de1cba

0x53261901

0xf718e5cf

0x03d447f6

42

0x970a0d5c

0xfc87dedf

0x8cb7872e

0x53261901

0xf718e5cf

43

0x7f193dc5

0x970a0d5c

0xff21f7b7

0x8cb7872e

0x53261901

44

0xee1b1aaf

0x7f193dc5

0x25c28357

0xff21f7b7

0x8cb7872e

45

0x40f28e09

0xee1b1aaf

0x5fc64f71

0x25c28357

0xff21f7b7

46

0x1c51e1f2

0x40f28e09

0xfb86c6ab

0x5fc64f71

0x25c28357

47

0xa01b846c

0x1c51e1f2

0x503ca382

0xfb86c6ab

0x5fc64f71

48

0xbead02ca

0xa01b846c

0x8714787c

0x503ca382

0xfb86c6ab

49

0xbaf39337

0xbead02ca

0x2806e11b

0x8714787c

0x503ca382

50

0x120731c5

0xbaf39337

0xafab40b2

0x2806e11b

0x8714787c

51

0x641db2ce

0x120731c5

0xeebce4cd

0xafab40b2

0x2806e11b

52

0x3847ad66

0x641db2ce

0x4481cc71

0xeebce4cd

0xafab40b2

53

0xe490436d

0x3847ad66

0x99076cb3

0x4481cc71

0xeebce4cd

54

0x27e9f1d8

0xe490436d

0x8e11eb59

0x99076cb3

0x4481cc71

55

0x7b71f76d

0x27e9f1d8

0x792410db

0x8e11eb59

0x99076cb3

56

0x5e6456af

0x7b71f76d

0x09fa7c76

0x792410db

0x8e11eb59

57

0xc846093f

0x5e6456af

0x5edc7ddb

0x09fa7c76

0x792410db

58

0xd262ff50

0xc846093f

0xd79915ab

0x5edc7ddb

0x09fa7c76

59

0x09d785fd

0xd262ff50

0xf211824f

0xd79915ab

0x5edc7ddb

60

0x3f52de5a

0x09d785fd

0x3498bfd4

0xf211824f

0xd79915ab

61

0xd756c147

0x3f52de5a

0x4275e17f

0x3498bfd4

0xf211824f

62

0x548c9cb2

0xd756c147

0x8fd4b796

0x4275e17f

0x3498bfd4

63

0xb66c020b

0x548c9cb2

0xf5d5b051

0x8fd4b796

0x4275e17f

64

0x6b61c9e1

0xb66c020b

0x9523272c

0xf5d5b051

0x8fd4b796

65

0x19dfa7ac

0x6b61c9e1

0xed9b0082

0x9523272c

0xf5d5b051

66

0x101655f9

0x19dfa7ac

0x5ad87278

0xed9b0082

0x9523272c

67

0x0c3df2b4

0x101655f9

0x0677e9eb

0x5ad87278

0xed9b0082

68

0x78dd4d2b

0x0c3df2b4

0x4405957e

0x0677e9eb

0x5ad87278

69

0x497093c0

0x78dd4d2b

0x030f7cad

0x4405957e

0x0677e9eb

70

0x3f2588c2

0x497093c0

0xde37534a

0x030f7cad

0xde37534a

71

0x5bcbb693

0x3f2588c2

0x125c24f0

0xde37534a

0x030f7cad

72

0x7fbd575a

0x5bcbb693

0x8fc96230

0x125c24f0

0xde37534a

73

0x1efd8e98

0x7fbd575a

0xd6f2eda4

0x8fc96230

0x125c24f0

74

0x1b01acbd

0x1efd8e98

0x9fef55d6

0xd6f2eda4

0x8fc96230

75

0x14221496

0x1b01acbd

0x07bf63a6

0x9fef55d6

0xd6f2eda4

76

0x90b6115f

0x14221496

0x46c06b2f

0x07bf63a6

0x9fef55d6

77

0xbd576b26

0x90b6115f

0x85088525

0x46c06b2f

0x07bf63a6

78

0xd18493a8

0xbd576b26

0xe42d8457

0x85088525

0x46c06b2f

79

0x75bdfbc2

0xd18493a8

0xaf55dac9

0xe42d8457

0x85088525

80

0x42541b35

0x5738d5e1

0x21834873

0x681e6df6

0xd8fdf6ad

杂凑值ABCDE

A:0xa9993e36

B:0x4706816a

C:0xba3e2571

D:0x7850c26c

E:0x9cd0d89d

附录B 下载链接

https://download.csdn.net/download/u013073067/13138345

编译环境:VS2010

语言:C

参考文献:

[1]http://www.cnblogs.com/scu-cjx/p/6878853.html

[2]https://baike.baidu.com/item/SHA%E5%AE%B6%E6%97%8F/9849595?fr=aladdin&fromtitle=SHA&fromid=9533316

这篇关于SHA1摘要算法(带示例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1113599

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

dp算法练习题【8】

不同二叉搜索树 96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3输出:5 示例 2: 输入:n = 1输出:1 class Solution {public int numTrees(int n) {int[] dp = new int

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯:

最大公因数:欧几里得算法

简述         求两个数字 m和n 的最大公因数,假设r是m%n的余数,只要n不等于0,就一直执行 m=n,n=r 举例 以18和12为例 m n r18 % 12 = 612 % 6 = 06 0所以最大公因数为:6 代码实现 #include<iostream>using namespace std;/