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
- sha1哈希算法 分组过程以及算法路程详细
- 安全哈希算法SHA1
- SHA1(安全哈希)算法原理
- SHA1算法
- SHA1算法
- SHA1算法
- SHA1算法
- SHA1摘要算法原理以及代码实现
- 算法学习路程
- 算法学习路程
- 一致性哈希算法以及其PHP实现详细解析
- java 对 安全哈希算法 SHA1 的实现
- python hashlib sha1和MD5哈希算法
- 分组算法
- 分组算法
- MP算法详细过程解析
- TCP的syn-cookie以及SHA1摘要算法的实现
- SHA1算法告破
- 这几天写的几个小程序
- hibernate:1+N问题
- sizeof作用在struct和union上的情况,经典解答
- com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:的解决
- 史上最著名的10个思想实验
- sha1哈希算法 分组过程以及算法路程详细
- Java浅复制和深复制
- 根据上排的数填写下排的数,并满足要求
- C# 中文转拼音方法
- 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
- Java常量池及相关介绍
- screen 常用命令
- C++预编译
- android 开发之旅, should use @string resource警告