MD5消息摘要算法的实现
- 警告
- **安全警告**:MD5算法已被证明存在密码学弱点,不再适合用于安全敏感场景。 具体漏洞包括:
- 碰撞攻击(2004年,王小云等)
- 前缀碰撞攻击(2008年,Sotirov等)
- 选择前缀碰撞攻击(2009年,Stevens等)
-
对于密码存储、数字签名、证书验证等场景,请使用 SHA-256 或 SHA-3 系列算法。
遵循的国际标准
本实现严格遵循以下历史标准规范:
MD5 算法规范:
相关历史标准(信息参考):
实现细节
| 特性 | 规范参数 |
| 算法 | MD5 消息摘要 |
| 输出长度 | 128 位(16 字节) |
| 内部状态 | 4 个 32 位字(A, B, C, D) |
| 分组大小 | 512 位(64 字节) |
| 轮数 | 4 轮 × 16 步 = 64 步 |
| 初始向量 (IV) | RFC 1321 §3.3 定义 |
| 填充方案 | Merkle–Damgård 强化(RFC 1321 §3.1) |
| 小端字节序 | 是(RFC 1321 §3.4) |
适用场景
尽管存在安全弱点,MD5 仍可用于以下非安全场景:
- 文件完整性校验
- 数据去重与内容寻址
- 非安全相关的哈希表实现
- 与历史系统兼容的数据交换
- 参见
- https://www.rfc-editor.org/rfc/rfc1321
-
https://csrc.nist.gov/projects/hash-functions
- 警告
- **禁止使用**:密码存储、数字签名、SSL/TLS 证书、代码签名、认证令牌等安全场景。