Skip to content
加密解密2026-08-283 分钟阅读

一句话结论

新项目一律用 SHA256(或更强的 SHA-3 / BLAKE2);MD5 只适合"检测意外损坏",绝不能再用于安全场景。

速查对比

| 维度 | MD5 | SHA256 | |---|---|---| | 输出长度 | 128 bit(32 位十六进制) | 256 bit(64 位十六进制) | | 设计年代 | 1991 | 2001 | | 碰撞抵抗 | ❌ 已被实战攻破 | ✅ 目前安全 | | 速度 | 略快 | 略慢 | | 适合安全用途 | ❌ 不适合 | ✅ 适合 |

MD5 为什么不安全

2004 年研究者就证明了 MD5 可以人为制造出两个内容不同、哈希值却相同的文件(碰撞)。到今天,构造一次 MD5 碰撞在普通电脑上只需几分钟。这意味着:

  • 攻击者可以伪造一个"哈希值和正版一样"的恶意文件;
  • 任何靠 MD5 做完整性验证 / 数字签名的逻辑都不可信。

所以凡是涉及"防篡改、防伪造"的地方,MD5 都要退役。

注意区分两种攻击的量级,别被"MD5 破解了"这句话误导:

| 攻击类型 | 含义 | MD5 现状 | |---|---|---| | 碰撞攻击 | 找任意两个不同输入同哈希 | ❌ 分钟级可造 | | 原像攻击 | 给定哈希反推原文 | 仍需 ~2^128,不现实 | | 第二原像 | 给定原文找另一个同哈希原文 | 比原像略易,仍很贵 |

"MD5 不能防伪"与"MD5 还能查重"并不矛盾——取决于攻击者是否需要指定内容。

SHA256 为什么更稳

SHA256 输出更长、设计更抗碰撞,至今没有实用的碰撞攻击。它广泛用于:

  • 文件/固件下载校验(确认没被篡改);
  • TLS 证书、区块链、Git 提交指纹;
  • 密码存储(配合盐值,但仍建议用 bcrypt/argon2 这类慢哈希)。

那 MD5 还能用吗

能,但只限于"检测意外损坏",比如:

  • 下载完比对自己的备份,确认传输没比特翻转;
  • 给大文件做个粗略去重标签。

只要场景里没有"人为对抗"(没人故意伪造),MD5 的便利性仍在。一旦涉及安全,换 SHA256。

怎么用工具算哈希

打开 ToolVault 工具匣 的 SHA256 哈希工具MD5 哈希工具

  1. 粘贴文本,或选择文件拖入;
  2. 实时得到对应算法的摘要;
  3. 比对两段摘要是否一致,即可判断内容是否相同;
  4. 全程本地计算,文件不上传。

下载开源软件后要校验官方发布的 SHA256 值,用 哈希校验工具 直接粘贴期望值比对,省去肉眼逐位核对;需要带密钥的场景(如接口签名)则用 HMAC 生成器,它是"哈希 + 密钥"的组合,能同时验证完整性和来源。

FAQ

校验下载文件该用哪个?

优先 SHA256(官网通常会提供 SHA256 校验值)。只有老系统只给了 MD5 时,用它粗验传输损坏即可,别拿它当安全凭证。

哈希能"解密"还原原文吗?

不能。哈希是单向的,无论 MD5 还是 SHA256 都无法逆向还原。能"解密"的说法是误区(MD5 也不是加密)。

密码存储能用 SHA256 吗?

不推荐直接用。SHA256 太快,易被暴力破解。密码应用 bcrypt、scrypt 或 Argon2 这类慢哈希加盐。一个直观对比:现代 GPU 对 SHA256 每秒可计算数十亿次,而 bcrypt 通过成本因子把单次哈希拖到几十毫秒——同样的穷举,成本相差十几个数量级。

SHA256 输出为什么是 64 个字符?能更短吗?

256 bit = 32 字节,十六进制表示每字节 2 字符,所以是 64 字符。想更短可以用 Base64 表示(44 字符)或截短使用——但截短会降低碰撞抵抗,每砍 1 bit 安全性减半,普通场景不建议截到 128 bit 以下。

Git 提交为什么还是短的 SHA-1?

Git 用 SHA-1 但只取前几位缩写显示(如 a1b2c3d)。完整 SHA-1 在碰撞攻击下也已告急(2017 年 SHAttered 攻击),Git 社区正在迁移到 SHA-256。日常代码托管风险可控,但如果你要用 Git 做"内容寻址的可信存储"(如发布供应链),要关注这个迁移。


本文由 ToolVault 工具匣 提供。相关工具:SHA256 哈希MD5 哈希HMAC 生成。访问 首页 查看更多开发者工具。


广告