MD5算法

MD-(Message-digest消息摘要)

MD2、MD4、MD5都产生一个128位的消息摘要。

MD5

1.消息填充  填充一个1和若干个0及64比特的(未填充)消息长度,使得总长度为512比特的整数倍.

2.消息分块与初进入MD结构进行送代压缩,到所有分块运算完为止

将消息填充,使其满足分组恰好为512bit的要求,M1,M2,...Mt,然后将初始值,与M1输入压缩函数F中,得到结果,然后将结果与M2输入压缩函数F中,不断迭代,最后得到的结果就是哈希值。

MD5算法

MD5压缩函数

输入:128bit的上一个结果           512bit的下一分组

512bit消息分组和128bit链接变量CVi-1,经过四轮迭代混合,在与输入链接变量的副本CVi-1进行模加,输出链接变量CVi

MD5算法

注:A=0x01234567  B=0x89abcdef  C=0xfedcba98  D=0x76543210

每个512位分组又划分为16个32位子分组,每轮很相似,每轮进行16次操作。

MD5的步函数

512比特消息块切割成16个32比特的字,使用次序毎轮各不相同

每一轮迭代又分为16步,每步输入寄存器的当前状态,消息的一个32比特分块,及一个32比特常数,更新寄存器的值

MD5算法

每次移位都是左循环移动S位                                                                        改变每轮移位量 以实现更快的雪崩效应

MD5的步函数

四轮迭代中步函数所使用不同的非线性函数,分别为(这四个函数也没道理)       相比MD4 从三轮变为四轮

F(X,Y,Z)=(X∩Y)∪(┐X∩Z)

G(X,Y,Z)=(X∩Z)∪(Y∩┐Z)         相比MD4 改进 为了削弱对称性

H(X,Y,Z)=X⊕Y⊕Z

I(X,Y,Z)=Y⊕(X∪┐Z)

             改变了第二轮和第三轮访问消息子分组的顺序,使其形态更不相似

 

第i步使用的常数t[i]定义为0<i<64        

 t[i]=[232×abs(sin(i))        其中i的单位是弧度;[x]表示取x的整数部分

               每步都有唯一的加法常数ti,消除任何输入数据的规律

每一步与上一步的结果相加,这样能更快的引起雪崩效应。(对于Hash码,雪崩效应是指少量消息位的变化会引起信息摘要的许多位变化)

https://www.jianshu.com/p/82729c87ef68