"MD5、SHA-1、SHA-256、SHA-512……这么多哈希算法到底有什么区别?哪个更安全?哪个更快?我该用哪个?"——面对多种算法选择时一头雾水。
本速查表从输出长度、安全等级、速度和典型用途四个维度横向对比五大主流哈希算法,一表看清差异,不再困惑。
01 五大哈希算法核心参数对比
下表横向对比了 MD5、SHA-1、SHA-256、SHA-384 和 SHA-512 五种常用哈希算法的关键参数。选择算法时,安全性是首要考虑因素——如果是安全相关场景,请使用 SHA-256 或更高级别。
哈希算法核心参数对比表
| 算法 | 输出长度 | 十六进制字符数 | 安全等级 | 状态 |
|---|---|---|---|---|
| MD5 | 128 位 | 32 | ❌ 不安全 | 已被攻破 |
| SHA-1 | 160 位 | 40 | ⚠️ 已弃用 | 已知碰撞 |
| SHA-256 | 256 位 | 64 | ✅ 安全 | 推荐使用 |
| SHA-384 | 384 位 | 96 | ✅ 高安全 | 推荐使用 |
| SHA-512 | 512 位 | 128 | ✅ 最高安全 | 推荐使用 |
02 各算法适用场景详解
MD5(128 位):虽然安全性已被攻破,但因输出短、速度快,仍用于非安全场景——文件去重检测、缓存键生成、数据库分片键。绝对不要用于密码哈希或数字签名。
SHA-1(160 位):2017 年 Google 公开演示了 SHA-1 碰撞攻击。Git 内部仍在使用 SHA-1(正在迁移到 SHA-256),但新项目不应选择 SHA-1。
SHA-256(256 位):当前的黄金标准。比特币区块链、TLS/SSL 证书、代码签名、API 令牌均使用 SHA-256。通用场景首选。
SHA-384(384 位):SHA-512 的截断版本,TLS 1.2+ 中作为备选项。安全性高于 SHA-256,但使用场景相对小众。
SHA-512(512 位):安全等级最高。在 64 位系统上计算速度甚至快于 SHA-256。适用于高安全要求场景,如政府和金融系统。
03 速度与性能考量
在 Suried Hash 工具中,所有算法都在浏览器本地使用 Web Crypto API 计算,性能表现优异。对于小文本(<1KB),所有算法的计算时间几乎没有区别(均在毫秒级)。
对于大文件(>100MB),SHA-512 在 64 位系统上反而可能比 SHA-256 更快,因为 SHA-512 每次处理 64 字节数据块(SHA-256 每次处理 32 字节)。如果你在 64 位系统上处理大量文件,SHA-512 是性能和安全性的双赢选择。
MD5 虽然理论速度最快,但由于安全问题,我们建议将 SHA-256 作为默认选择——安全性远超 MD5,速度差异在实际使用中几乎感知不到。
在密码哈希场景(如用户登录),你反而不想用快速算法!bcrypt、scrypt 等专用密码哈希函数故意设计得很慢,以增加暴力破解的成本。
常见问题
SHA-256 和 SHA-512 哪个更好?
SHA-512 安全强度更高且在 64 位系统上更快,但 SHA-256 足以应对绝大多数场景。如果没有特殊安全需求,SHA-256 是最佳默认选择。
SHA-384 有什么用?为什么比较少见?
SHA-384 是 SHA-512 的截断版本,主要用于 TLS 握手协议中作为备选算法。日常使用中,SHA-256 已经足够安全,而 SHA-512 的完整输出提供了更高安全性,因此 SHA-384 的使用场景相对有限。
为什么 Git 还在用 SHA-1?
Git 从 2005 年创建时就使用了 SHA-1,迁移到 SHA-256 涉及大量基础架构改动。Git 2.29+ 已开始实验性地支持 SHA-256 对象 ID。但由于向后兼容性问题,完全迁移仍需时间。
哈希值的长度越长就越安全吗?
一般来说是的——更长的输出意味着更大的搜索空间,碰撞概率更低。但安全性还取决于算法设计本身。SHA-256(256 位)比 MD5(128 位)安全得多,不仅因为更长,更因为算法设计更优。
同一个文件在不同操作系统上的哈希值一样吗?
只要文件内容完全相同(逐字节一致),在任何操作系统和任何工具上的哈希值都完全相同。但要注意文本文件的换行符差异——Windows 用 CRLF(\r\n),Linux/Mac 用 LF(\n),这会导致文本文件的哈希值不同。