← 全部工具

数据不出浏览器

Hash Generator — SHA 在线哈希

免费 hash generator。用 Web Crypto 计算 SHA-1 / SHA-256 / SHA-384 / SHA-512。

哈希输出
—

为场景选择合适的哈希

哈希把任意输入变成固定长度的指纹,这个性质带来两件事:一是完整性校验——发布下载文件时附上 SHA-256,用户就能证明文件没有被改动;二是快速查找,比较 64 个十六进制字符比比较两个大文件便宜得多。

哈希做不到的是隐藏小输入。密码是典型案例:GPU 每秒可以尝试数十亿次,快速哈希几乎形同虚设,而未加盐的值还会被彩虹表整片命中。密码存储必须使用刻意变慢、吃内存的函数,例如 Argon2id 或 bcrypt,并且每个用户一个独立盐值。

比较摘要时要用恒定时间比较。朴素的字符串比较会在第一个不同字符处提前返回,从而泄露「猜对了多少」。对公网上的完整性校验这通常无所谓,但对任何与鉴权相关的场景都成立。

常见问题

哈希用途?
校验完整性、指纹文件或派生标识,不是加密。
能解密哈希吗?
不能。哈希是单向的。
数据出浏览器吗?
不会。使用 SubtleCrypto 本地计算。
SHA-256、SHA-1、MD5 该用哪个?
新项目一律用 SHA-256。MD5 和 SHA-1 的抗碰撞性已被攻破,攻击者可以构造出摘要相同的第二个输入,因此绝不能用于签名或证书。它们还会出现在历史校验和里,那是唯一还能接受它们的场景。
密码该怎么哈希?
不要用 SHA-256。使用 Argon2id、scrypt 或 bcrypt 这类密码哈希函数,它们被设计成可调慢,并为每个密码生成独立随机盐。快速通用哈希会让离线爆破变得极其便宜,无论密码本身有多长。
为什么同样的输入总是得到同样的哈希?
确定性正是它的意义:哈希是输入的纯函数,系统无需保存原文即可比对指纹。但确定性也解释了为什么要加盐——否则攻击者一次爆破的成果,可以直接套用到所有选了同一密码的用户身上。

相关工具