md5算法原理

MD5还是好久之前学过,早已经忘了。。。最近项目需要,又拾起来看了看,记录下来。
MD5,中文名为消息摘要算法,常用于数据完整校验。通过特定hash散列算法将文本信息转换为简短的消息摘要。
md5以512位分组处理信息,每一分组又被划分为16个32位子分组,变换处理后,输出由4个32位分组组成,级联生成一个128位散列值。
大致过程如下:

  • 填充

假设输入信息长度为len,则以len%512=448公式对数据进行填充

  • 填充消息长度

将消息长度上一步结果的后64位,如果消息长度大于2^64,则取低64位

  • 变换处理

常数 A=0X67452301L,B=0XEFCDAB89L,C=0X98BADCFEL,D=0X10325476L
4个变换函数

F(X,Y,Z)=(X&Y)|((~X)&Z)
G(X,Y,Z)=(X&Z)|(Y&(~Z))
H(X,Y,Z)=X^Y^Z
I(X,Y,Z)=Y^(X|(~Z))

4轮变换的操作

FF(a,b,c,d,Mj,s,ti)表示a=b+((a+F(b,c,d)+Mj+ti)<<<s)
GG(a,b,c,d,Mj,s,ti)表示a=b+((a+G(b,c,d)+Mj+ti)<<<s)
HH(a,b,c,d,Mj,s,ti)表示a=b+((a+H(b,c,d)+Mj+ti)<<<s)
II(a,b,c,d,Mj,s,ti)表示a=b+((a+I(b,c,d)+Mj+ti)<<<s)
Mj表示消息的第j个子分组

每轮变换后A、B、C、D分别加上a、b、c、d,然后进行一下轮
 

Leave a Reply

Your email address will not be published. Required fields are marked *