什么是哈希?MD5、SHA-1、SHA-256 完全解读
哈希算法听起来高大上,其实你天天都在用。下载文件后的校验、登录网站时的密码验证、Git 里每个 commit 的 ID — 背后都是哈希。理解它,能帮你避开不少安全上的坑。
这篇文章会把哈希的原理、常见算法(MD5、SHA-1、SHA-256、SHA-512)和各自的适用场景讲清楚。你也可以用我们的 在线哈希生成工具 亲手试试不同算法的差异。
什么是哈希函数?
哈希函数把任意长度的输入,变成一串固定长度的输出(叫"哈希值"或"摘要")。好的哈希函数有四个关键特性:
1. 确定性
同样的输入永远得到同样的输出。这事听起来简单,但这是哈希所有应用的基础。
2. 不可逆性(单向性)
知道哈希值,不可能反推出原始输入。我告诉你 SHA-256("hello") 的结果是 "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824",但你没办法从这个字符串倒推出"hello"。
3. 抗碰撞性
很难找到两个不同的输入产生相同的哈希值。如果两个文件哈希值一样,就叫"碰撞"——这在安全领域是大事。
4. 雪崩效应
输入改一个字符,输出天差地别。你看:
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-256("Hello") = 8e6929e85833f7e1c5da3eb3bd12c66ae0e0693151084539d97be13f57611d20
SHA-256("helloo") = e2befcc9c1b8917ba3eab743b0be65072f4069587b9ed540da22e9299fe343ff
就改了一个字母的大小写,整个哈希值完全不一样了。
常见的哈希算法对比
| 算法 | 输出长度 | 推出年份 | 安全性状态 | 适用场景 |
|---|---|---|---|---|
| MD5 | 128 位(32 个十六进制字符) | 1992 | ⚠️ 不安全,已可被碰撞攻击 | 文件完整性校验(非安全要求) |
| SHA-1 | 160 位(40 个十六进制字符) | 1995 | ⚠️ 不安全,已可被碰撞攻击 | 旧系统兼容(建议迁移) |
| SHA-256 | 256 位(64 个十六进制字符) | 2001 | ✅ 安全 | 密码存储、数字签名、SSL/TLS |
| SHA-512 | 512 位(128 个十六进制字符) | 2001 | ✅ 安全 | 高安全需求场景 |
MD5 为什么不再安全?
MD5 是 1992 年的老算法了。2004 年,王小云教授团队发现了 MD5 的碰撞漏洞。到 2012 年,Flame 恶意软件已经用这个漏洞搞过攻击。现在呢?普通电脑几秒钟就能制造 MD5 碰撞。所以一句话:任何和安全相关的场景都别用 MD5。
SHA-1 的日落
SHA-1 也被王小云团队在 2005 年找到了更高效的碰撞方法。2017 年,Google 演示了第一个实际的 SHA-1 碰撞攻击(SHAttered)。从那以后,主流浏览器和操作系统都停止接受 SHA-1 签名的证书了。
SHA-256 和 SHA-2 家族
SHA-2(包括 SHA-256、SHA-384、SHA-512)是 NSA 在 2001 年设计的,到现在还是最广泛使用的哈希家族:
- 比特币和区块链用 SHA-256 做工作量证明
- SSL/TLS 证书广泛使用 SHA-256 签名
- Linux 发行版用 SHA-256 校验 ISO 文件
- Git用 SHA-1(正在迁移到 SHA-256)标识每个提交
哈希的实际应用
1. 密码存储
正经的网站不会直接存你的密码明文,而是存哈希值。登录的时候计算你输入的哈希值,跟库里存的比对。但这还不够——黑客有"彩虹表"可以逆向查常见密码。所以实际中要加盐(Salt):
哈希值 = SHA-256(密码 + 随机盐值)
2. 文件完整性校验
下载文件的时候,网站通常会附一个 SHA-256 哈希值。你可以用我们的 在线哈希生成工具 算一下下载文件的哈希,跟网站对得上就说明文件没被改过。
3. 数字签名
数字签名不是给整篇文档加密——那样太慢了。实际是先算文档的哈希值,再用私钥给哈希值签名。又快又安全。
4. 数据去重
存数据块之前先算它的哈希值,就能快速判断之前有没有存过同样的内容。很多存储系统都这么干。
如何使用在线哈希工具
我们的 在线哈希生成工具 支持:
- MD5、SHA-1、SHA-256、SHA-512 四种算法
- 所有计算在浏览器中本地完成
- 支持复制全部结果
- 完全免费,无需注册
总结
哈希是数字世界的基石。MD5 和 SHA-1 已经因为安全漏洞退休了,但 SHA-256 和 SHA-512 在今天和可预见的未来都很可靠。
选哈希算法的黄金法则:除非有特殊需求,否则直接用 SHA-256 永远不会错。
用我们的 在线哈希生成工具 亲手试试,感受不同算法之间的差异!