sha1哈希算法 分组过程以及算法路程详细

来源:互联网 发布:教跳舞的软件 编辑:程序博客网 时间:2024/05/16 22:07

一、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

原创粉丝点击