概述
The MD5 message-digest algorithm is a widely used hash function producing a 128-bit hash value. Although MD5 was initially designed to be used as a cryptographic hash function, it has been found to suffer from extensive vulnerabilities. ——Wikipedia
使用 little-endian (小端模式),输入任意不定长度信息,以512-bit 进行分组,生成四个32-bit 数据,最后联合输出固定128-bit 的信息摘要。
算法过程
1. 填充
消息长度为 K
填充内容:至少1个1,若干0,即10…0,长度为P(1≤P≤512)
填充后满足 (K + P)mod 512 = 448,即使K mod 512 = 448,P = 512
再填充消息长度:K mod 2^64
最终满足:(K + P + 64) mod 512 = 0
2. 分块
以512bits分组,分成L块:Y0,…,YL-1
以32bits分组,分成N块:M0,…,MN-1,N = 16*L
3. 缓冲区初始化
初始化一个128-bit 的 MD 缓冲区,记为 CVq,表示成4个32-bit寄存器 (A, B, C, D);
CV0 = IV。迭代在 MD 缓冲区进行,最后一步的128-bit 输出即为算法结果即CVL。
寄存器 (A, B, C, D) 置16进制初值作为初始向量 IV,并采用小端存储 (little-endian) 的存储结构:
A = 0x67452301
B = 0xEFCDAB89
C = 0x98BADCFE
D = 0x10325476
4. 循环压缩
以512-bit 消息分组为单位,每一分组 Yq (q = 0, 1, …, L-1) 经过4个循环的压缩算法,表示为:
CV0 = IV
CVi = HMD5(CVi-1, Yi-1)
最终结果MD5 = CVL