什么是哈希?MD5、SHA-1、SHA-256 完全解读

📅 2026-05-07 · 📂 密码学基础 · ⏱ 10 分钟阅读

哈希算法听起来高大上,其实你天天都在用。下载文件后的校验、登录网站时的密码验证、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

就改了一个字母的大小写,整个哈希值完全不一样了。

常见的哈希算法对比

算法输出长度推出年份安全性状态适用场景
MD5128 位(32 个十六进制字符)1992⚠️ 不安全,已可被碰撞攻击文件完整性校验(非安全要求)
SHA-1160 位(40 个十六进制字符)1995⚠️ 不安全,已可被碰撞攻击旧系统兼容(建议迁移)
SHA-256256 位(64 个十六进制字符)2001✅ 安全密码存储、数字签名、SSL/TLS
SHA-512512 位(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 年设计的,到现在还是最广泛使用的哈希家族:

哈希的实际应用

1. 密码存储

正经的网站不会直接存你的密码明文,而是存哈希值。登录的时候计算你输入的哈希值,跟库里存的比对。但这还不够——黑客有"彩虹表"可以逆向查常见密码。所以实际中要加盐(Salt):

哈希值 = SHA-256(密码 + 随机盐值)

2. 文件完整性校验

下载文件的时候,网站通常会附一个 SHA-256 哈希值。你可以用我们的 在线哈希生成工具 算一下下载文件的哈希,跟网站对得上就说明文件没被改过。

3. 数字签名

数字签名不是给整篇文档加密——那样太慢了。实际是先算文档的哈希值,再用私钥给哈希值签名。又快又安全。

4. 数据去重

存数据块之前先算它的哈希值,就能快速判断之前有没有存过同样的内容。很多存储系统都这么干。

如何使用在线哈希工具

我们的 在线哈希生成工具 支持:

总结

哈希是数字世界的基石。MD5 和 SHA-1 已经因为安全漏洞退休了,但 SHA-256 和 SHA-512 在今天和可预见的未来都很可靠。

选哈希算法的黄金法则:除非有特殊需求,否则直接用 SHA-256 永远不会错。

用我们的 在线哈希生成工具 亲手试试,感受不同算法之间的差异!