SHA 哈希计算

SHA-1 / SHA-256 / SHA-384 / SHA-512 一键计算

—

SHA 家族对比:SHA-1、SHA-256、SHA-512 该用哪个

SHA 家族一览

SHA 是 NIST 发布的一系列密码学哈希函数。当前实际会用到的是 SHA-2 家族,以及正在被逐步采纳的 SHA-3。

算法输出十六进制长度状态
SHA-1160 位40 字符已不安全,禁止用于新用途
SHA-224224 位56 字符安全,用途有限
SHA-256256 位64 字符安全,通用首选
SHA-384384 位96 字符安全,常用于 TLS 证书
SHA-512512 位128 字符安全,需要更长输出时
SHA3-256256 位64 字符安全,结构不同于 SHA-2

SHA-256 是绝大多数场景的正确默认值。它的设计、实现库、硬件加速支持都最成熟,兼容性最好。

SHA-1 为什么不能用

2017 年的 SHAttered 项目公开了第一个 SHA-1 实际碰撞:两段内容不同的 PDF 拥有相同的 SHA-1。成本约 11 万美元的 GPU 算力,之后还在继续下降。Google、Microsoft、Mozilla 已联合弃用 SHA-1 证书,主流浏览器会直接拒绝对 SHA-1 签名的证书建立连接。

和 MD5 一样,SHA-1 的问题也是抗碰撞性被破坏,而不是"不能算很多位"。所以它仍能算,只是不能再用来证明"两份内容不同"。

SHA-256 出现在哪些地方

哈希不能替代的东西

不能用裸哈希做完整性认证。如果攻击者能同时修改内容和哈希值(比如同时改文件和页面上的校验码),校验就没有意义。要防篡改,必须用带密钥的 HMAC,或者数字签名,或者把哈希放到攻击者改不到的地方(HTTPS 站点、已签名的发布渠道)。

不能用哈希存密码。SHA-256 很快,快就是缺点——GPU 每秒能算几十亿次。密码哈希需要的是"慢",用 bcrypt、scrypt 或 Argon2 这类可调成本的算法,并且每个账户用独立的随机盐。

哈希不可逆,这是特性不是缺陷,但也意味着它不能用来保护需要还原的数据。加密是可逆的,哈希不是。

怎么用这个工具

粘贴文本即可得到 SHA-1 / SHA-256 / SHA-384 / SHA-512 的结果。计算用浏览器内置的 Web Crypto API,全程本地执行,输入内容不会发送到任何服务器。对于超大文件(GB 级),浏览器 API 需要一次性读入内存,建议改用命令行工具如 sha256sum 流式计算。

验证下载文件时,注意逐字符比对:长度不对就不是同一个哈希,不用细看内容。工具支持大小写切换,因为有些发布方给的是大写。

常见问题

SHA-256 和 MD5 该用哪个?

校验完整性用 SHA-256;MD5 和 SHA-1 都已存在碰撞攻击,不适合安全场景。

为什么提示"当前环境不支持"?

WebCrypto 的摘要接口只在 HTTPS 或 localhost 下可用,部署到线上就没问题。