跳到主要内容
加密解密2026-08-284 分钟阅读

SHA256 和 MD5 到底有什么区别?该用哪个?

一句话结论

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

速查对比

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

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 做"内容寻址的可信存储"(如发布供应链),要关注这个迁移。

实现注记

选定算法去校验大文件时有个容易忽略的竞态:哈希一算数十秒,期间换文件或换算法,先前的结果可能晚到落到新操作上,变成「文件名 A + 哈希 B」。本站校验工具用自增序号丢弃过期结果——完整性工具自己得先保证结果对得上号。


来自 ToolVault 工具匣 的开发手记。相关工具:SHA256 哈希、MD5 哈希、HMAC 生成。访问 首页 查看更多开发者工具。