本文主要是介绍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的长度为 l 比特。首先将比特“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所示。
第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摘要算法(带示例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!