博客 / 哈希算法科普
哈希算法科普:MD5、SHA家族的区别与用途
2026-06-25 · 7 分钟阅读
什么是哈希算法?
哈希(Hash)算法是一种将任意长度的数据映射为固定长度摘要的数学函数。无论你输入的是一个单词、一整本小说还是一部高清电影,哈希算法都会输出一串固定长度的字符——比如MD5始终输出32位十六进制字符,SHA-256始终输出64位十六进制字符。
哈希算法的核心特性:
- 确定性:相同的输入始终产生相同的输出。
- 不可逆性:无法从哈希值反推出原始数据。这也是哈希不同于加密的关键所在。
- 雪崩效应:输入哪怕只改一个字符,输出就会完全不同。例如"hello"和"Hello"(大小写差异)的哈希值天差地别。
- 抗碰撞性:难以找到两个不同输入产生相同哈希值。一旦能做到,算法就被认为"已破解"。
MD5:曾经的王牌,今日的遗产
MD5(Message Digest 5)由罗纳德·李维斯特于1991年设计,生成128位(32字符)哈希值。在90年代和00年代初期,MD5是最受欢迎的哈希算法,广泛用于文件完整性校验和密码存储。
然而2004年,中国密码学家王小云教授团队发现了MD5的碰撞攻击方法——能够在合理时间内构造两个不同内容但具有相同MD5值的文件。这意味着恶意软件可以伪装成合法软件通过MD5校验。今天,MD5在安全领域已被弃用,但在非安全场景中仍然常见:
- 快速比对两个文件是否相同(非安全场景)
- 数据库分区键生成
- 缓存键值生成
SHA-1:从流行到退役
SHA-1(Secure Hash Algorithm 1)由美国国家安全局设计,生成160位(40字符)哈希值。相比MD5,SHA-1的抗碰撞能力更强——但强得有限。2017年,Google与CWI联合团队成功实现了SHA-1的首次实际碰撞攻击(SHAttered项目),证明SHA-1也不再安全。
如今Git系统已将SHA-1逐步迁移至SHA-256,主流浏览器也停止信任使用SHA-1的SSL证书。
SHA-2家族:当前安全标准
SHA-2是一族哈希算法,包含SHA-224、SHA-256、SHA-384、SHA-512等变体。数字代表输出的比特长度。其中SHA-256是应用最广泛的版本:
- 区块链与比特币:比特币使用SHA-256作为工作量证明的核心算法。
- SSL/TLS证书:几乎所有HTTPS网站的数字签名都基于SHA-256。
- 文件校验:下载操作系统镜像时,官方提供的校验码通常是SHA-256。
- 密码存储:配合盐值(salt),SHA-256仍是许多系统的密码哈希方案。
动手实践:在线生成哈希值
使用 ToolHub 哈希生成器,你可以轻松体验各种哈希算法:
- 输入任意文本,查看其MD5、SHA-1、SHA-256、SHA-512等多种哈希值。
- 体验"雪崩效应":把"hello"改成"Hello",观察哈希值的巨大变化。
- 验证文件完整性:将下载文件的哈希值与官方提供的对比,确保未被篡改。
- 所有运算在浏览器本地完成,你的数据不会上传。
如何选择哈希算法?
不同场景选择不同算法,这里给出通用建议:
- 密码存储:使用bcrypt、scrypt或Argon2等专为密码设计的慢哈希算法,而非通用哈希。如果必须使用通用哈希,至少选择SHA-256并配合随机盐值。
- 文件完整性校验:SHA-256是当前最佳平衡点,安全可靠且性能优异。
- 非安全场景(缓存、分区):MD5速度快、长度短,仍然适用。
- 最高安全需求:可考虑SHA-3或BLAKE2等新一代算法。
记住:没有绝对安全的哈希算法,只有持续演进的攻防博弈。保持关注行业动态,及时淘汰已不安全的旧算法,是每个开发者的责任。