

1)填充消息:任意长度的消息首先需要进行填充处理,使得填充后的消息总长度与448模512同余(即填充后的消息长度=448 mod 512)。填充的方法是在消息后面添加一位“1”,后续都是“0”。
2)添加原始消息长度:在填充后的消息后面再添加一个64位的二进制整数表示填充前原始消息的长度。这时经过处理后的消息长度正好是512位的倍数。
3)初始值(IV)的初始化:MD5中有四个32位缓冲区,用(A, B, C, D)表示,用来存储散列计算的中间结果和最终结果,缓冲区中的值被称为链接变量。首先将其分别初始化为为:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。
4)以512位的分组为单位对消息进行循环散列计算:经过处理的消息,以512位为单位,分成N个分组,用Y0,Y1,…,YN-1。MD5对每个分组进行散列处理。每一轮的处理会对(A,B,C,D)进行更新。
5)输出散列值:所有的N个分组消息都处理完后,最后一轮得到的四个缓冲区的值即为整个消息的散列值。
| 各省软考办 | ||||||||||