MD5(MD:messagedigest,信息摘要)
1990年10月,著名密码学家R.L.Rivest在MIT(Massachusetts Institute of-Technology)提出了一种Hash函数,作为RFC1320(RFC:互联网研究和开发机构工作记录)公开发表,称为MD4
MD5是MD4的改进版本, 于1992年4月作为 RFC 1321公开发表
MD5 细节
Step 1) 填充消息: 10…0, 使消息长度等于448 mod 512
Step 2) 添加明文长度(64位)
Step 3) 初始化4个字(128 bits)的寄存器(A, B, C, D) A = 67452301
B = EFCDAB89 C = 98BADCFE D = 10325476
Step 4) 消息由512-bits 数据块(Y0,Y1,…,YL-1)处理 4 轮, 每轮16次迭代
1轮:每一轮处理16个子块. 每一轮的输入如下:
1)16个子块; 2) 寄存器ABCD中的值; 3) 常量T
总流程
每轮中的1次迭代:
BB + ((A + g(B,C,D) + M[k] +T[i])<<<s)
MD5 压缩函数
每一轮有16次迭代,每1次迭代形如:BB + ((A + g(B,C,D) + M[k] +T[i])<<<s)
g():4轮都不同的非线性函数 (F,G,H,I)
第一轮:F(X,Y,Z) = (X&Y)|((¬X)&Z)
第二轮:G(X,Y,Z)=(X&Z)|(Y&(¬Z))
第三轮:H(X,Y,Z)=XYZ
第四轮:I(X,Y,Z) = Y^(X|Z))
M[k] =第q个512-bits数据块的第k个字
T[i] = T盒的第i个32-bits字 (T[i]=232*abs(sin(i)))(常量)