哈希生成器

在下方输入文本,即可同时生成 SHA-1、SHA-256、SHA-384 和 SHA-512 哈希;填入密钥还能用 HMAC 签名。使用 Web Crypto API,所有处理均在浏览器中本地完成。

关于哈希函数

密码哈希函数接收输入并产生固定大小的字节字符串。输出(哈希值)对于输入是唯一的——即使微小的改变也会产生完全不同的哈希值。

  • SHA-1 - 160位,已弃用于安全用途。仍用于Git。
  • SHA-256 - 256位,SHA-2系列成员。推荐用于一般用途。
  • SHA-384 - 384位,SHA-2系列成员。SHA-512的截断变体。
  • SHA-512 - 512位,SHA-2系列成员。最强的标准哈希。

本页所有摘要,包括 HMAC 签名,都来自浏览器自带的 Web Crypto API。没有任何手写实现,也不会上传任何内容。

有两个设置对结果的影响超出多数人的预期。字符集决定了拿哪些字节去算,所以同一句话在 UTF-8 和 Windows-1252 下摘要不同。换行设置对一切来自文件的内容都很关键,因为按 CRLF 算出的摘要永远不会等于按 LF 算出的。把校验和粘进比对框,页面会告诉你它出自这四个中的哪一个,这是辨认无标注哈希最快的办法。

这些东西你到底是怎么存的?

哈希、令牌和密码的强度,取决于它们周围那段代码:成本因子还停在默认值,令牌没人检查过期时间,密钥被提交进了仓库。我们审查并加固应用,告诉你攻击者最先摸到的是哪一处。

预约一次安全审查

常见问题

为什么我算出的哈希和别的工具不一样?
几乎总是因为字节不同,而不是算法不同。末尾多一个换行、用 CRLF 而不是 LF、文本按 Windows-1252 而不是 UTF-8 编码,都会改变输入,从而改变摘要。本页面之所以提供字符集和换行设置,就是为了把这些差别摆到明面上。
MD5 去哪了?
已经拿掉了。MD5 存在可行的碰撞攻击,对一个攻击者可能动过手脚的文件来说,它证明不了什么;而且浏览器的加密接口不提供它,这意味着页面里得自带一份手写实现。新做的东西,用 SHA-256 是合理的默认选择。
HMAC 是什么,什么时候需要?
HMAC 把一个共享密钥混进摘要里,只有拿着密钥的人才能生成或校验。webhook 签名和 API 请求签名要用它,因为在那些场合普通哈希证明不了什么,任何人都能对同一段请求体算出来。
我到底该用哪一个?
没有特别理由就用 SHA-256。对多数用途来说 SHA-512 并不会明显更强,但在 64 位硬件上更快,所以也是个合理的默认值。SHA-1 出现在这里,是因为大量既有软件仍在产出它,而不是推荐:它存在可行的碰撞攻击,不该用来守护任何东西。
我的文本会到你们服务器吗?
不会。每个摘要都在你的浏览器里算出来,其中四个由浏览器自带的加密接口完成。你输入的东西不会被上传,所以拿它处理令牌、配置文件等你不愿粘贴到远程服务的内容是安全的。