一、Sha1分组过程
对 于任意长度的明文,sha1可以产生160位的摘要。对明文的分组处理过程如下:
1. 对数据流尾部添加0x80标记。任意长度的明文首先需要添加位数,使明文总长度为448(mod512)位。将0x80 字节追加到数据流尾部以后,源数据流的整个长度将会发生变化,考虑到还要添加64位(8个字节)的位长度,必须填充0 以使修改后的源数据流是64字节(512位)的倍数。在明文后添加位的方法是第 一个添加位是l,其余都是0。
2. 然后将真正明文的长度(没有添加位以前的明文长度)以64位表示,附加于前面已添加过位的明文后,此时的明文长度正好是 512位的倍数。当明文长度大于2的64次方时,仅仅使用低64位比特填充,附加到最后一个分组的末尾。
3. 经过添加处理的明文,其长度正好为512位的整数倍,然后按512位的长度进行分组(block),可以划分成L份明文分组,我们用Y0,Y1,……,YL-1表示这些明文分组。
4. Sha1默认数据流以big endian 方式存放。
Sha1的哈希算法流程
分组之后,对所得到的若干分组反复重复处理。对每个明文分组的摘要生成过程如下:
1. 将512位划分成16个子明文分组,每个子分组32位
2. 申请5个链接变量a、b、c、d、e,初始为H0、H1、H2、H3、H4
3. 将16个子分组扩展为80份
4. 80个子分组进行4轮运算,得到新的a、b、c、d、e值
5. 将新的链接变量与原始链接变量进行求和
6. 链接变量作为下一个明文分组的初始链接变量
7. 最后一个分组的5个链接变量就是SHA1摘要
如下图所示:
参考文献:FIPS 180-1 Secure Hash Standard: http://www.itl.nist.gov/fipspubs/fip180-1.htm