什么是SHA1算法(Secure Hash Algorithm)
SHA1算法也是一种哈希算法,也称单向散列算法,不可逆,适用于数字签名标准。与MD5大同小异。
算法流程
(1)明文处理,对明文进行填充,使其满足模512余448,填充方式与MD5相同,然后补64位的明文数据长度。
(2)分组,将512位的明文以32位为一组划分为16组。
(3)初始化变量,这里用到五个变量A、B、C、D、E。
(4)分组后的明文数据有16组,将其拓展为80组,共320字节。
(5)80组明文数据进行4轮运算,一轮20个步骤,共80次。
(6)运算结束后,将计算的结果与初始化时的变量值相加。
(7)如果只有一个512位,就不需要继续计算,如果不止1个512位,那么上一步骤中相加后的结果作为个80轮循环中的五个变量值继续进行计算。
(8)最后,五个变量值的拼接后的数据就是其SHA1值。
算法实现
明文处理和分组与MD5相同,这里不再解释。
初始化变量
与MD5不同的是,SHA1使用了5个变量
A=0x67452301,
B=0xEFCDAB89,
C=0x98BADCFE,
D=0x10325476,
E=0xC3D2E1F0
16组明文数据扩展为80组
首先把原来的明文数据用M来表示,记为M[t] (t=0,1,…15)。
而扩展后的明文数据用W来表示,记为W[t] (t=0,1,…,79)。
扩展的方式就是前16组数据不变,从第17组到80组按照图中公式计算所得,(Wt-3)+(Wt-8)+(Wt-14)+(Wt-16)
,其结果左移1位得到的。
4轮运算
每轮20个步骤,这些步骤可以用一个公式来表示
A=(A<<5)+ft(B,C,D)+E+Wt+Kt
,其结果赋值给了A,
将A变量值赋值给变量B,
将B变量值循环左移30位赋值给变量C,
将C变量值赋值给变量D,
将D变量值赋值给变量E。
f 函数表
计算后的结果与初始变量值相加便是最终的结果。