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压缩函数
输入:128bit的上一个结果 512bit的下一分组
512bit消息分组和128bit链接变量CVi-1,经过四轮迭代混合,在与输入链接变量的副本CVi-1进行模加,输出链接变量CVi。
注:A=0x01234567 B=0x89abcdef C=0xfedcba98 D=0x76543210
每个512位分组又划分为16个32位子分组,每轮很相似,每轮进行16次操作。
MD5的步函数
512比特消息块切割成16个32比特的字,使用次序毎轮各不相同
每一轮迭代又分为16步,每步输入寄存器的当前状态,消息的一个32比特分块,及一个32比特常数,更新寄存器的值
每次移位都是左循环移动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