MD5(Message-Digest Algorithm 5)是一种常用的哈希函数算法,用于将任意长度的数据映射为固定长度的哈希值。它通常用于数据完整性验证、密码加密等领域
MD5的特点
不可逆性:通过 MD5 算法生成的哈希值是一种紧凑的表示形式,无法直接逆推回原始数据。这使得 MD5 在密码学中被广泛应用,因为即使他人获取到哈希值,也难以还原出原始数据。
雪崩效应:即使原始数据发生微小的变化,MD5 哈希值也会产生很大的差异。这一特性使得 MD5 可以用于检测数据是否被篡改,确保数据的完整性。
快速计算:MD5 算法相对计算速度较快,在处理大量数据时效率较高。
MD5的使用场景
- 密码保护
- 完整性校验
- 数字签名
- 云盘秒传
MD5的格式
8efa61d98454af8cf42711e6ae4c2f6a # 128位比特也就是16字节
## 长度固定
## 不可逆(从结果无法反推原始数据)
## 高度离散型 (md5的数据没有任何规律)
## 抗碰撞性
MD5的生成过程
补位
1. 使长度变成n*512+448
情况一:
当数据的长度不满足n*412+448时进行补位,补1个1然后多个0,时期长度满足n*412+448
情况二:
当数据的长度满足n*412+448时也必须进行一次补位,同业也是补1个1多个0,使长度满足(n+1)*412+448
2. 使长度变成n*512的整数倍
再补上64位,也就是文件的大小记录在这最后的64位数据里面
标准幻数
标准幻数是4*4=16个字节
A=01234567
B=89ABCDEF
C=FEDCBA98
D=76543210
在程序中使用的小端字节数
A=0x67542301
B=0xEFCDAB89
C=0X98BADCFE
D=0X10325476
函数
FF=(A,B,C,D,X,S,AC)
GG=(A,B,C,D,X,S,AC)
HH=(A,B,C,D,X,S,AC)
II=(A,B,C,D,X,S,AC)
## X使下图中的4字节数据
## AC是一些标准的常数
#define F(x,y,z)(((x)&(y))|((~x)&(z)))
#define G(x,y,z)(((x)&(z))|((y)&(~z)))
#define H(x,y,z)((x)^(y)^(z))
#define I(x,y,z)((y)^((x)|(~z)))
#define ROTATELEFT(num,n)(((num)<<(n))|((num)>>(32-(n))))
#define FF(a,b,c,d,x,s,ac){\
(a) += F((b),(c),(d))+(x)+ac;\
(a) += ROTATELEFT((a),(s));\
(a) += (b);\
}
#define GG(a,b,c,d,x,s,ac){\
(a) += G((b),(c),(d))+(x)+ac;\
(a) += ROTATELEFT((a),(s));\
(a) += (b);\
}
#define HH(a,b,c,d,x,s,ac){\
(a) += H((b),(c),(d))+(x)+ac;\
(a) += ROTATELEFT((a),(s));\
(a) += (b);\
}
#define II(a,b,c,d,x,s,ac){\
(a) += I((b),(c),(d))+(x)+ac;\
(a) += ROTATELEFT((a),(s));\
(a) += (b);\
}
扩展
- SHA-1(Secure Hash Algorithm-1):与 MD5 类似,但比 MD5 更安全。然而,SHA-1 也已被证明存在一些安全风险,现在通常不推荐使用。
- SHA-2 系列:包括 SHA-256、SHA-384 和 SHA-512 等。这些算法比 SHA-1 更安全,并且在现代密码学和数据完整性验证中得到广泛应用。
- SHA-3:作为 SHA-2 系列的后继者,SHA-3 是一种较新的哈希函数算法,具有更高的安全性和性能。
- BLAKE2 系列:BLAKE2b 和 BLAKE2s 是相对较新的哈希函数,提供了快速的计算速度和良好的安全性。
- SM3:这是中国国家标准的哈希函数算法,用于国内的信息安全领域。