crypto
一些密码学原理和工具
MD5算法
- 把消息分组,每组64 byte(512 bit),。
- 对最后一个消息快(不足 56 byte)进行填充,留下最后的 8 byte 用来标识补充前消息的总长度,中间部分用padding 补位,以 0x80(0b10000000)开头,后面全0,直到长度达到 56 byte。
- 每个消息块第 57 byte开始存储补位前信息的长度(单位为bit),小端存储。例如:
message
填充后(hex)
1 | 6d 65 73 73 61 67 65 80 00000000..... (最后8byte) 38 00 00 00 00 00 00 00 |
MD5 有4个初始链变量,经过哈希摘要后,链变量的值会改变,最后一轮产生的链变量高低位呼唤就是计算出的MD5值。
1
2
3
4A=0x67452301
B=0xefcdab89
C=0x98badcfe
D=0x10325476
哈希长度扩展攻击
受攻击的算法:MD4、MD5、RIPEMD-160、SHA-0、SHA-1、SHA-256、SHA-512、WHIRLPOOL
如果已知key的长度,原信息以及md5(key + message)
,就可以得到后面添加任意字符的md6值md5(key + message + any)
。
以md5为例,将原信息按md5填充后,得到了md5值,这个值实际上(如果有)就是下一个消息快计算的初始链变量高低位互换。也就是说我们在后面填充新的信息,用这个链变量继续按md5算法继续计算就能得到md5(secret + message + any)
。