哈希生成器
任意文本的 MD5、SHA-1、SHA-256 和 SHA-512 哈希值,使用 Web Crypto API 在浏览器中实时计算。你输入的内容不会发送到任何地方。
应该用哪一种?
取决于你计算哈希的用途。
SHA-256 是校验和与完整性检查的安全默认选择。MD5 和 SHA-1 在密码学上都已被攻破(可以构造出碰撞),适合用来检查文件在传输中是否损坏,但不适合任何安全敏感的场景,比如存储密码。
不能用于密码
这些算法都不应该用来存储密码——它们被特意设计得很快,而这恰恰是密码存储最不需要的特性。密码存储需要专门设计的慢速算法,比如 bcrypt、scrypt 或 Argon2。
工作原理
SHA-1、SHA-256 和 SHA-512 由浏览器内置的 crypto.subtle.digest API 计算:你的文本先用 TextEncoder 转换为 UTF-8 字节,原生计算摘要,结果格式化为小写十六进制。MD5 是个例外:Web Crypto 特意拒绝实现它(因为它在密码学上已被攻破),所以这个工具内置了一个小型的 RFC 1321 JavaScript 实现专门用于 MD5。四种算法在每次按键时都会重新计算,并有防护机制:如果你打字速度快于计算完成速度,会丢弃过时的结果。
和终端比对时的一个实际陷阱:这个工具计算的哈希严格对应你输入的字节,末尾没有换行符。echo "hello" | sha256sum 永远不会匹配,因为 echo 会追加一个换行符,你实际计算的是 "hello\n" 的哈希。换成 printf '%s' "hello" | sha256sum,结果就能完全一致。这个陷阱也解释了不同语言和工具之间"为什么我的哈希对不上"的大多数情况。
由于 crypto.subtle 运行在浏览器内部,计算摘要不需要把任何东西发送出去。你可以自己验证:打开开发者工具的网络面板,在输入框中输入密码或 API 密钥。不会出现任何请求,你的文本始终留在这个标签页里。