Md5 与 Sha 如何将大于64字节的数据分成多块
2008-11-28 20:44
381 查看
Md5 与 Sha1/Sha256 都是以64字节的块作为计算单元的。而源数据流经过修整后必须是64字节的倍数,不足的将填充0。这样一来,算法所得到的数据将完全是一个个64字节的包,而算法也即对每个包进行迭代计算处理——用上一次计算得到的值对当前块进行计算。
MD5与SHA1/SHA256都有最初的所谓的散列值,在送入第一个数据块之前,必须设置好特定的最初值。而当计算完第一个数据块后,这个散列值就会变化,当计算完所有的数据块后,就得到了这个数据流的散列值。
Md5 对数据流尾部添加0x80标记,Md5默认数据流以little endian 方式存放。将0x80 字节追加到数据流尾部以后,源数据流的整个长度将会发生变化,考虑到还要添加8个字节的位长度,必须填充0 以使修改后的源数据流是64字节的倍数。
这个情况分为以下二种情况:
数据流的长度 mod 64 = N1, 也就是说最后一块数据块长度是N1字节。
#1 N1 + 1 > 55,这个情况下,添加标志字节0x80后,最后一块数据块长度大于55 字节。这个时候,原始数据位长度就不能添加到这个块上。所以,这个块余下的字节将进行0 填充以形成一个64字节的块。在这个块计算完毕后,还要计算一个前面是 56 个0,后面8个字节是原始数据的位长度的块。
#2 N1 + 1 < 56,这个情况下,添加标志字节0x80后,8个字节的位长度也可以直接安放到数据块最后8个字节上,所以只需要在0x80后与最后8个字节之前填充0 即可。计算完这个块就是最后的散列值。 8个字节的数据位长度是没修改之前的数据流的字节长度 * 8(得到位的数目),以little endian 方式存放,也就是低4字节在前,高4字节随后。Sha 与MD5相近,也是要对数据流尾部添加0x80标记。不过Sha 默认数据流以 Big endian 方式存放,所以若
输入数据是little endian 类型的,需要进行转换处理。Sha最后的8个字节的位长度同样也是以Big endian 方式
存放。 Sha 对数据流的修改处理除了字节次序不同以外,情况完全相同。
MD5与SHA1/SHA256都有最初的所谓的散列值,在送入第一个数据块之前,必须设置好特定的最初值。而当计算完第一个数据块后,这个散列值就会变化,当计算完所有的数据块后,就得到了这个数据流的散列值。
Md5 对数据流尾部添加0x80标记,Md5默认数据流以little endian 方式存放。将0x80 字节追加到数据流尾部以后,源数据流的整个长度将会发生变化,考虑到还要添加8个字节的位长度,必须填充0 以使修改后的源数据流是64字节的倍数。
这个情况分为以下二种情况:
数据流的长度 mod 64 = N1, 也就是说最后一块数据块长度是N1字节。
#1 N1 + 1 > 55,这个情况下,添加标志字节0x80后,最后一块数据块长度大于55 字节。这个时候,原始数据位长度就不能添加到这个块上。所以,这个块余下的字节将进行0 填充以形成一个64字节的块。在这个块计算完毕后,还要计算一个前面是 56 个0,后面8个字节是原始数据的位长度的块。
#2 N1 + 1 < 56,这个情况下,添加标志字节0x80后,8个字节的位长度也可以直接安放到数据块最后8个字节上,所以只需要在0x80后与最后8个字节之前填充0 即可。计算完这个块就是最后的散列值。 8个字节的数据位长度是没修改之前的数据流的字节长度 * 8(得到位的数目),以little endian 方式存放,也就是低4字节在前,高4字节随后。Sha 与MD5相近,也是要对数据流尾部添加0x80标记。不过Sha 默认数据流以 Big endian 方式存放,所以若
输入数据是little endian 类型的,需要进行转换处理。Sha最后的8个字节的位长度同样也是以Big endian 方式
存放。 Sha 对数据流的修改处理除了字节次序不同以外,情况完全相同。
相关文章推荐
- ASP:如何在Form域中Post大于100K字节的数据
- asp:如何在Form域中Post大于100K字节的数据?我的方法如下:
- 给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
- 如何生成安全的密码 Hash:MD5, SHA, PBKDF2, BCrypt 示例
- 给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
- 面试- 阿里-. 大数据题目- 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
- 什么是MD5 什么是SHA-1 如何校验这些Hash
- curl POST的数据大于1024字节
- 为什么udp为什么不能发送大于1472字节数据
- 在excel中如何将一列很长的数据平均分成几列
- 数据安全之MD5、SHA-1、CRC32区别
- 数据摘要算法介绍(SHA、MD5和CRC32)
- java如何判断一个String类型数据由多少字节组成?
- 数据摘要算法的测试效率(SHA、MD5和CRC32)
- 给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
- 为什么udp为什么不能发送大于1472字节数据
- 在64为win7系统中各数据类型所占字节
- 如何生成一个 WinCE 下文件全路径大于 MAX_PATH(260) 字节的文件路径?
- 如何处理Oledb中EXCEL驱动读取EXCEL文件中字段长度大于255字符时出现的"数据截断"问题.
- 为什么udp为什么不能发送大于1472字节数据