sha256算法go语言 sha1算法代码( 二 )


00000000 0000000000000000 00000000
00000000 0000000000000000 00000000
00000000 00000000
现在,数据的长度是448了,我们可以进行下一步操作 。
(二)补长度
所谓的补长度是将原始数据的长度补到已经进行了补位操作的消息后面 。通常用一个64位的数据来表示原始消息的长度 。如果消息长度不大于2^64,那么第一个字就是0 。在进行了补长度的操作以后,整个消息就变成下面这样了(16进制格式)
61626380 0000000000000000 00000000
00000000 0000000000000000 00000000
00000000 0000000000000000 00000000
00000000 0000000000000000 00000018
如果原始的消息长度超过了512,我们需要将它补成512的倍数 。然后我们把整个消息分成一个一个512位的数据块 , 分别处理每一个数据块,从而得到消息摘要 。
(三)使用的常量
一系列的常量字K(0),K(1), ... , K(79) , 如果以16进制给出 。它们如下:
Kt = 0x5A827999 (0= t = 19)
Kt = 0x6ED9EBA1 (20= t = 39)
Kt = 0x8F1BBCDC (40= t = 59)
Kt = 0xCA62C1D6 (60= t = 79).
(四)需要使用的函数
在SHA1中我们需要一系列的函数 。每个函数ft (0 = t = 79)都操作32位字B,C,D并且产生32位字作为输出 。ft(B,C,D)可以如下定义
ft(B,C,D) = (B ANDC) or ((NOT B) AND D) ( 0 = t = 19)
ft(B,C,D) = B XOR CXOR D (20 = t = 39)
ft(B,C,D) = (B ANDC) or (B AND D) or (C AND D) (40 = t = 59)
ft(B,C,D) = B XOR CXOR D (60 = t = 79).
(五)计算消息摘要
必须使用进行了补位和补长度后的消息来计算消息摘要 。计算需要两个缓冲区,每个都由5个32位的字组成,还需要一个80个32位字的缓冲区 。第一个5个字的缓冲区被标识为A , B,C,D , E 。第二个5个字的缓冲区被标识为H0,H1, H2, H3, H4 。80个字的缓冲区被标识为W0,W1,..., W79
另外还需要一个一个字的TEMP缓冲区 。
为了产生消息摘要,在第4部分中定义的16个字的数据块M1,M2,..., Mn
会依次进行处理,处理每个数据块Mi 包含80个步骤 。
在处理每个数据块之前 , 缓冲区{Hi} 被初始化为下面的值(16进制)
H0 = 0x67452301
H1 = 0xEFCDAB89
H2 = 0x98BADCFE
H3 = 0x10325476
H4 = 0xC3D2E1F0.
现在开始处理M1, M2,... , Mn 。为了处理 Mi,需要进行下面的步骤
(1). 将Mi 分成 16 个字 W0, W1, ... , W15,W0 是最左边的字
(2). 对于t = 16 到 79 令 Wt = S1(Wt-3 XOR Wt-8XOR Wt- 14 XOR Wt-16).
(3). 令A = H0, B = H1, C = H2, D = H3, E = H4.
(4) 对于t = 0 到 79,执行下面的循环
TEMP = S5(A) +ft(B,C,D) + E + Wt + Kt;
E = D; D = C; C =S30(B); B = A; A = TEMP;
(5). 令H0 = H0 + A, H1 = H1 + B, H2 = H2 + C, H3 = H3 + D, H4 = H4 + E.
在处理完所有的 Mn, 后,消息摘要是一个160位的字符串 , 以下面的顺序标识
H0 H1 H2 H3 H4.
对于SHA256、SHA384、SHA512 。你也可以用相似的办法来计算消息摘要 。对消息进行补位的算法完全是一样的 。
三、SHA算法被破解了吗?
2013年9月10日美国约翰霍普金斯大学的计算机科学教授,知名的加密算法专家,Matthew Green被NSA要求删除他的一份关于破解加密算法的与NSA有关的博客 。同时约翰霍普金斯大学服务器上的该博客镜像也被要求删除 。
加密算法专家,美国约翰霍普金斯大学教授Matthew Green
但当采访人员向该大学求证时,该校称从未收到来自NSA的要求要删除博客或镜像的资料,但采访人员却无法在原网址再找到该博客 。幸运的是,从谷歌的缓存可以找到该博客 。该博客提到NSA每年花费2.5亿美元来为自己在解密信息方面获取优势,并列举了NSA的一系列见不得人的做法 。

推荐阅读