杂凑值产生器
计算文字或文件的 MD5、SHA-1、SHA-256、SHA-384 与 SHA-512 杂凑值,并与公布的校验码比对。文件不会被上传。
在你的浏览器中运行
- MD5
- -
- SHA-1
- -
- SHA-256
- -
- SHA-384
- -
- SHA-512
- -
MD5 与 SHA-1 在安全用途上已被攻破,只适合用于文件校验。
验证下载的文件
这是大多数人需要杂凑值的原因。专案会公布释出档的 SHA-256,你计算手上这份文件的杂凑值再比对, 两者相同就代表你拿到的与公布的完全一致,一个字节都不差。
请直接选择上面的文件,不要把内容贴成文字——文件会在你的浏览器中读取与计算,再大的安装档也不会 离开你的电脑。把公布的校验码贴进比对栏,它会告诉你是哪一种演算法相符。
在命令列上:
shasum -a 256 file.iso # macOS、Linux
certutil -hashfile file.iso SHA256 # Windows
该用哪一种演算法
| 演算法 | 输出长度 | 现况 |
|---|---|---|
| MD5 | 128 比特,32 个十六进位字元 | 已被攻破,能轻易制造碰撞 |
| SHA-1 | 160 比特,40 个十六进位字元 | 已被攻破,2017 年公开了实际碰撞 |
| SHA-256 | 256 比特,64 个十六进位字元 | 目前的默认选择 |
| SHA-384 | 384 比特,96 个十六进位字元 | SHA-512 的截断版,部分 TLS 套件使用 |
| SHA-512 | 512 比特,128 个十六进位字元 | 在 64 比特硬件上常比 SHA-256 更快 |
这里的「被攻破」指的是可以建构出碰撞:攻击者能做出两个杂凑值相同、内容不同的文件。这不代表 杂凑值可以被反推回原文。MD5 用来侦测意外损毁——下载中断、硬盘坏轨——仍然堪用,这也是有些镜像站 至今仍附上 MD5 的原因。
杂凑不能拿来存密码
直接用 SHA-256 对密码取杂凑,计算速度快得惊人,而这正是最不该有的特性:一般显示卡每秒可以试上 数十亿组。密码储存需要刻意设计得缓慢、加盐、占内存的函式——argon2id、scrypt 或 bcrypt——并且每个使用者用不同的盐。任何通用的杂凑工具,包括这一个,都不该出现在那条流程里。
为什么同样的输入永远得到同样的结果
杂凑是输入的纯函式,没有随机成分,也没有金钥,所以同样的字节在任何机器上、任何时候都会得到 同样的值。这种确定性让比对有意义,但也表示杂凑值本身无法证明文件是「谁」做的。要证明来源需要 数位签章,也就是把杂凑值和私钥结合起来。
要注意结尾的换行会改变结果。echo hello | shasum 计算的是六个字节,不是五个,这通常就是命令列
算出来的值和贴进网页的文字对不起来的原因。
你的数据只留在这里
杂凑值由浏览器的 WebCrypto 计算,MD5 则由一个需要时才载入的小模组提供。你输入的文字与选择的文件 都不会上传。