第 3 课
MD5 与 SHA 算法
对比 MD5、SHA-1 与 SHA-2 家族在实际开发中的用法。
不同 Hash 算法输出的摘要长度和安全余量不同。选错算法可能导致无法对接第三方工具,或造成“看起来很安全”的错觉。
MD5(128 位)
MD5 计算快,仍出现在旧 checksum、缓存键和部分工具里。由于碰撞攻击已实用化,不应再用于新的安全敏感设计。MD5 更适合兼容与排查,而不是对抗主动攻击者的强完整性证明。
SHA-1(160 位)
SHA-1 如今基本属于遗留算法。Git 仍使用基于 SHA-1 的对象 ID 格式,但 TLS 证书与许多签名场景已迁移到其他算法。可以把 SHA-1 与 MD5 类似对待:规范要求时用,新安全保证别指望它。
SHA-256、SHA-384、SHA-512(SHA-2 家族)
这是当前最常见的现代默认:
- SHA-256:文件 checksum、内容寻址和许多 API 的默认选择
- SHA-384 / SHA-512:部分标准与平台要求的更强变体
浏览器 Web Crypto API 对三者支持普遍良好。
实用选择建议
- 校验现代下载包 checksum → SHA-256
- 对接仍输出 MD5 的旧工具 → MD5
- 合规文档明确要求 SHA-512 → SHA-512
- 存储密码 → 不要单独使用这些算法;应使用 Argon2、bcrypt 或 scrypt
对比 Hash 前,务必确认 算法名称、十六进制还是 Base64 输出、以及 哈希的是原始字节还是 UTF-8 文本。