SHA1摘要算法

版权声明:本人才疏学浅,欢迎大家批评指正,互相讨论学习。 https://blog.csdn.net/scuyxi/article/details/69213798

概念

安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。

对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。

算法需要的各常量的值及函数表达式

常量:

 Kt = 0x5A827999 (0 <= t <= 19)
 Kt = 0x6ED9EBA1 (20 <= t <= 39)
 Kt = 0x8F1BBCDC (40 <= t <= 59)
 Kt = 0xCA62C1D6 (60 <= t <= 79)

函数表达式:

ft(B,C,D) = (B AND C) OR ((NOT B) AND D) ( 0 <= t <= 19)
ft(B,C,D) = B XOR C XOR D    (20 <= t <= 39)
ft(B,C,D) = (B AND C) OR (B AND D) OR (C AND D)  (40 <= t <= 59)
ft(B,C,D) = B XOR C XOR D    (60 <= t <= 79).

算法流程

1. 补位

消息必须进行补位,以使其长度在对512取模以后的余数是448。

补位是这样进行的:先补一个1,然后再补0,直到长度满足对512取模后余数是448。总而言之,补位是至少补一位,最多补512位(区块大小)。

2. 补长度

补长度是将原始数据的长度补到已经进行了补位操作的消息后面。通常用一个64位(长度大小)的数据来表示原始消息的长度。如果消息长度不大于2^64,那么第一个字就是0。在进行了补长度的操作以后,整个消息就变成下面这样了(16进制格式)

3. 计算消息摘要

必须使用进行了补位和补长度后的消息来计算消息摘要。计算需要两个缓冲区,每个都由5个32位(字符尺寸:32位,内部大小:160位)的字组成,还需要一个80个32位字的缓冲区。第一个5个字的缓冲区被标识为A,B,C,D,E。第一个5个字的缓冲区被标识为H0, H1, H2, H3, H4。80个字的缓冲区被标识为W0, W1,…, W79。

经过一系列的计算后,最终得到的消息摘要为:
H[0] H[1] H[2] H[3] H[4]
长度为160位(输出长度

猜你喜欢

转载自blog.csdn.net/scuyxi/article/details/69213798