SHA-1、SHA-256、SHA-512 怎么选
一句话结论
新项目一律用 SHA-256。SHA-1 已在 2017 年被实际碰撞攻击攻破,不能再用于任何安全场景。SHA-512 更安全但在 32 位平台和短消息上更慢,只在需要更长摘要或跑在 64 位环境时才有优势。
核心区别对照
| 摘要长度 | SHA-1 | SHA-256 | SHA-512 |
|---|---|---|---|
| 安全状态 | 已攻破,禁用 | 安全,当前标准 | 安全,余量更大 |
| 实际碰撞攻击 | 已实现(SHAttered,2017) | 无 | 无 |
| 32 位平台性能 | 快 | 快 | 较慢 |
| 64 位平台性能 | 快 | 快 | 与 SHA-256 相当或更快 |
| 适用场景 | 仅遗留系统校验(非安全) | 签名、证书、校验、密码派生 | 长摘要需求、64 位服务端 |
SHA-1
曾经的默认选择,2017 年 Google 与 CWI 用 SHAttered 攻击造出了两个内容不同但 SHA-1 相同的 PDF,正式宣告其不安全。现在主流浏览器和证书机构已全面停用。除非你在对接改不动的老系统,否则不要在新代码里出现它。
SHA-256 / SHA-512
同属 SHA-2 家族,目前都没有已知的实际攻击。SHA-256 是事实标准:TLS 证书、代码签名、文件校验、JWT 都是它。SHA-512 摘要更长、抗量子余量更大,在 64 位 CPU 上处理长消息时甚至更快,但在 32 位环境(部分嵌入式、老设备)会明显变慢。存密码时两者都不对——应该用 bcrypt、scrypt 或 Argon2。
怎么选
- 文件校验、接口签名、证书 → SHA-256
- 需要最长摘要或服务端 64 位环境 → SHA-512
- 密码存储 → 都不要,用 Argon2 / bcrypt / scrypt
相关工具
常见问题
SHA-256 输出为什么是 64 个字符
256 bit 摘要,每字节写成 2 位十六进制,256 ÷ 8 × 2 = 64 个字符。
SHA-512 一定比 SHA-256 安全吗
理论上抗碰撞强度更高,但对目前所有实际攻击方式而言两者都绰绰有余,选择时更多看平台性能与生态兼容性。
能用哈希存用户密码吗
不能。SHA 系列设计目标是快,正好利于暴力破解。存密码必须用专门的慢哈希:Argon2、bcrypt 或 scrypt。