一、算法介绍
🔐 MD5(Message-Digest Algorithm 5)
- 出生年份:1992 年,Ronald Rivest 设计
- 输出长度:128 位(16 字节),32 位十六进制字符串
- 结构:基于 Merkle-Damgård 结构,迭代压缩函数
🔐 SHA(Secure Hash Algorithm)
| 算法 | 输出长度 | 年份 | 说明 |
|---|---|---|---|
| SHA-1 | 160 位 | 1993 | NIST 发布,已不建议使用 |
| SHA-2 | 224/256/384/512 位 | 2001 | 目前主流,尚未被攻破 |
| SHA-3 | 224/256/384/512 位 | 2015 | 采用 Keccak 算法,结构全新 |
🔐 SM3(国密哈希算法)
- 出生年份:2010 年,中国国家密码管理局发布(GM/T 0004-2012)
- 输出长度:256 位
- 结构:基于 Merkle-Damgård 结构,压缩函数与 SHA-2 类似但细节不同
- 地位:中国商用密码体系中的哈希标准
二、优缺点对比
| 算法 | 优点 | 缺点 |
|---|---|---|
| MD5 | 速度快、兼容性好、实现简单 | ⚠️ 已不安全:存在碰撞攻击,实际已被破解 |
| SHA-1 | 速度较快、兼容性好 | ⚠️ 已不建议使用:2017 年 Google 实现碰撞 |
| SHA-2 | 安全强度高、广泛使用、尚未被攻破 | 计算相对较慢(但比很多算法快) |
| SHA-3 | 结构完全不同、安全性高、抗侧信道攻击 | 推出时间相对较短,生态还在完善 |
| SM3 | 中国国密标准、安全性对标 SHA-2、自主可控 | 国际化程度低,主要在中国使用 |
三、安全强度排序
MD5(已破解) < SHA-1(不推荐) < SHA-224 < SHA-256 ≈ SM3 < SHA-384 < SHA-512 < SHA-3
四、使用场景
MD5
- ❌ 严禁用于安全场景
- ✅ 可用于:文件完整性校验(非安全场景)、数据去重、checksum
- ⚠️ 密码存储、数字签名等禁止使用
SHA-1
- ❌ 不推荐用于安全场景
- ✅ 可用于:Git 版本控制(历史兼容性)
- ⚠️ TLS/SSL 证书、数字签名等已禁止使用
SHA-2(SHA-256/384/512)
- ✅ 当前主流哈希算法
- 适用:密码存储(建议用 bcrypt/scrypt/argon2)、数字签名、TLS/SSL、金融数据完整性、区块链
SHA-3
- ✅ 高安全要求场景
- 适用:政府与军事通信(部分国家)、高安全等级系统、量子计算未来安全部署
SM3
- ✅ 中国境内安全场景(强制使用)
- 适用:中国政府信息系统(必须使用国密)、商用密码产品合规、中国金融 IC 卡与支付系统、电子身份证、政务系统
五、总结建议
| 场景 | 推荐算法 |
|---|---|
| 中国境内安全场景 | SM3(国密合规) |
| 国际通用安全场景 | SHA-256 / SHA-512 |
| 最高安全等级 | SHA-3 |
| 文件校验(非安全) | MD5(速度优先) |
| 密码存储 | bcrypt / scrypt / argon2 |