MD5 与 SHA-256 的区别:哈希长度、安全性与现实用途
MD5 和 SHA-256 都是密码学哈希函数,把任意长度的输入压缩成固定长度的「指纹」。两者外形相似——都是十六进制字符串、都不可逆——但安全性天差地别:MD5 的碰撞攻击早在 2004 年就被公开攻破,而 SHA-256 至今仍是 TLS 证书和区块链的基石。
| 对比维度 | MD5 | SHA-256 |
|---|---|---|
| 算法家族与输出长度 | 独立设计的 128-bit 哈希,输出 32 个十六进制字符 | SHA-2 家族成员,输出 256-bit,即 64 个十六进制字符 |
| 抗碰撞性 | 已被实际攻破:研究者能低成本构造两个不同文件共享同一 MD5,伪造证书曾真实上演 | 目前没有可行的碰撞攻击,约 2^128 的工作量远超现有算力 |
| 运算速度 | 更快。结构简单,在老旧 CPU 上优势明显 | 略慢,但现代 CPU 普遍带 SHA 硬件扩展指令,实际差距已很小 |
| 安全用途现状 | 已被主流标准除名:CA/Browser Forum 禁止其用于证书签名,安全场景应视为禁用 | 现代默认选项:TLS 证书签名、区块链工作量证明、HMAC 与软件供应链校验都在用 |
| 密码存储适用性 | 绝对不行:计算太快,配合彩虹表几乎秒破 | 同样不推荐直接使用:应选 bcrypt、scrypt 或 Argon2 这类专为密码设计的慢哈希 |
| 文件完整性校验 | 仍广泛用于下载校验防「传输损坏」,但无法防御蓄意投毒——攻击者可同时替换文件与 MD5 | 发布签名、容器镜像摘要的标准选择,防损坏也防篡改(配合可信通道分发) |
| 生态兼容性 | 老系统遗留极多:旧数据库口令、历史下载页、部分硬件固件仍在产出 MD5 | 所有现代语言与平台的一等公民,新接口默认提供 |
何时选 MD5?
只有在维护无法升级的遗留系统、或做非安全性的数据去重/缓存键时才考虑 MD5。它速度快、字符串短,用作内部缓存 key 或去重指纹尚可,但绝不能出现在任何信任边界上。
何时选 SHA-256?
任何新的安全相关需求——文件签名、接口签名、区块链、HMAC——一律选 SHA-256。即便只是给用户展示下载校验值,SHA-256 也是零成本的正确习惯。
相关在线工具
MD5加密在线 - 字符串MD5值快速生成
MD5在线加密工具,纯前端实现 RFC 1321 标准 MD5 算法,输入任意文本即时生成 32 位大写、32 位小写与 16 位三种密文,支持中文与长文本,一键复制,全部本地计算不上传。
SHA哈希生成 - SHA256/SHA1在线计算
SHA系列哈希值生成器,支持 SHA-1、SHA-224、SHA-256、SHA-384、SHA-512 五种算法,基于浏览器 WebCrypto 与标准实现,可切换大小写输出,适用于完整性校验与签名场景,全部本地计算。
文件MD5哈希值在线计算与校验
文件MD5哈希值在线计算与校验工具,上传任意格式文件即时计算 MD5 值,输入期望值一键比对判断文件完整性,适用于下载校验、传输验证与防篡改检查,全部本地计算不上传。
常见问题
MD5 已经被破解,为什么很多下载页还在用它?
因为那些场景只需要检测「传输过程中的意外损坏」,不需要对抗主动攻击者。检查完整性 MD5 够用,防篡改则必须换成 SHA-256 并通过可信渠道分发哈希值。
SHA-256 可以直接用来存用户密码吗?
不建议。SHA-256 计算太快,GPU 每秒可尝试数十亿次。应使用 bcrypt、scrypt 或 Argon2 这类带盐且故意缓慢的算法,把单次验证成本抬高到暴力破解不划算的水平。
MD5 输出只有 32 位字符,会不会更容易撞车?
会。128-bit 空间意味着约 2^64 次计算就有可能找到碰撞,而实际密码分析已把成本压得更低;SHA-256 的 256-bit 空间让这类攻击在可预见的未来都不可行。
延伸说明
迁移存量系统时的常见做法是双写过渡:同一份数据同时记录 MD5 与 SHA-256,新逻辑读 SHA-256,待下游全部切换完成再下线 MD5 列。另外注意区分「碰撞」与「原像」:伪造一份与原文件同 MD5 的替代品在技术上可行但成本仍高,所以 MD5 校验下载是否完整依然有效;只是别让它承担身份认证或签名的职责。站内提供 MD5、SHA 系列在线计算与文件校验工具,本地运行即可比对两种算法的输出差异。