MD5原理:
1、 填充
href="file:///c:%5cdocume%7e1%5cadmini%7e1%5clocals%7e1%5ctemp%5cmsohtml1%5c04%5cclip_filelist.xml" rel="file-list" /> 原始消息 + 填充(1~512位) + 原始消息的长度LEN => 要散列的数据(摘要) |
注意;填充的位数等于512*n-64-原始消息的长度。
填充总是增加的,即使原始消息的长度为448位,依然要填充512位,使长度变成960位。
填充方法是一个1和多个0。
原始消息的长度表示为64位的值,若原始消息的长度超过64位(即:大于264),则只用长度的低64位。
2、 将消息分成n个512位的块。
3、 初始化链接变量
A | 十六进制 | 01 | 23 | 45 | 67 |
B | 十六进制 | 89 | AB | CD | EF |
C | 十六进制 | FE | DC | BA | 98 |
D | 十六进制 | 76 | 54 | 32 | 10 |
4、 处理块
(1) 将4个链接变量赋值到4个变量
a=A b=B c=C d=D
(2) 将当前512位的块分成16个子块,则每个子块为32位
5、数据处理
(1) 16个输入子块分别设为M[0],M[1],M[2]……M[15],或表示为M[i],i=1~15
(2) 设一个包含64个元素的常量数组,表示为T[i],i=1~64,T[i]为32位
(3) 按下图的过程对数据进行处理(数学表达式: a=b+(a+Process P(b,c,d)+M[i]+T[k])<<s)
处理P:
轮次 函数
1 (b AND c) OR ( (NOT b) AND ( b ) )
2 (b AND d) OR (c AND (NOT d))
3 b XOR c XOR d
4 c XOR (b OR ( NOT d))
T[k]等于4294967296*abs(sin(k))所得结果的证书部分,其中k用弧度来表示。(这样做是为了通过正弦函数和幂函数来进一步消除变换中的线性)