MD5 / SHA 在线哈希计算

一次算出 MD5 与 SHA 系列摘要,支持文本与文件输入、十六进制大小写和 Base64 输出。

下载完安装包想核对官方公布的校验值、确认两个文件内容是否完全一致、给缓存或分片生成固定长度的 key,都依赖哈希摘要。手工挑算法、切换大小写、逐个复制结果很费时间,也容易抄错一位导致排查半天。

输入文本或选择文件后,页面会同时给出 MD5、SHA-1、SHA-256、SHA-384、SHA-512 五种结果,可切换十六进制大小写与 Base64 输出。文本先经 TextEncoder 转成字节,文件以二进制读取后在本机完成计算,整个过程不产生任何网络请求,几百 MB 的文件也只在本地读取。

MD5、SHA-1 的碰撞风险

MD5 的碰撞攻击早已实用化,普通机器几秒钟就能构造出两个内容不同、摘要相同的文件;SHA-1 也在 2017 年被 SHAttered 项目实际攻破。碰撞意味着别人可以准备一份摘要一致但内容不同的文件,这对数字签名、证书和软件分发是致命的。因此安全场景应使用 SHA-256 及以上或 SHA-3;而核对下载是否损坏、生成缓存 key 这类不对抗攻击的用途,MD5 依然够用。

摘要为什么不可逆、加盐有什么用

摘要算法把任意长度的输入压缩成固定长度的输出,这个过程有损,理论上无法反推原文。网上所谓「MD5 解密」其实是用预先算好的彩虹表去查表,或者对常见口令做暴力枚举。加盐就是在原文后拼一段随机字符串再哈希,让相同密码得到不同结果,彩虹表随即失效;再把计算过程反复迭代(bcrypt、scrypt、Argon2 这类慢哈希),爆破成本会成倍上升。

前端算哈希不能替代后端加盐

在浏览器里计算哈希看起来很安全,其实运行环境和代码都掌握在用户手上:盐值能从打包文件里读出来,计算逻辑也能被改写。如果直接把前端算出的哈希存进数据库,攻击者一旦拖库,仍可离线对每个盐值爆破。合理的分工是前端用哈希做完整性校验、去重和缓存 key,口令存储交给后端,用每用户随机盐加慢哈希,并配合传输层加密。

广告

常见问题

MD5 还安全吗?
用于安全目的已经不安全。MD5 的碰撞可以在秒级构造,不能用于数字签名、证书或口令存储;但做文件校验和、生成不要求抗碰撞的缓存 key 依然常见,因为它速度快、兼容性最好。
MD5 能解密还原出原文吗?
不能。MD5 是有损压缩,信息在计算过程中就丢失了,不存在逆运算。能查到的所谓解密结果都来自彩虹表或字典碰撞,只对常见口令有效,加了随机盐的哈希基本无法还原。
文件校验用 MD5 还是 SHA-256?
对抗篡改或恶意替换时用 SHA-256;只是确认下载有没有损坏、两边文件是否一致,MD5 足够且更快。多数发行方会同时提供两者,跟随官方给出的那一个即可,不要拿不同算法的值互相比较。
同一段文本的哈希每次算出来都一样吗?
一样。哈希算法是确定性的,相同输入、相同算法与编码,结果永远相同。如果结果不一致,通常是因为编码不同(UTF-8 与 GBK)、多了换行或 BOM,或者输入里被加入了随机盐。

相关工具

广告