跳到主要内容
LeedyBox
支持我们

哈希生成器:MD5、SHA-1、SHA-256、SHA-512 与 HMAC

在浏览器中计算文本或文件的 MD5、SHA-1、SHA-256、SHA-384、SHA-512 哈希值或 HMAC,并与预期的校验和比对。

输入

文本按输入的原样计算哈希,包括空格和换行。此输入框中的换行按 LF 计算。

结果

输入文本或选择文件即可查看哈希值。

MD5
SHA-1
SHA-256
SHA-384
SHA-512

十六进制值比对时不区分大小写;Base64 值必须完全一致。

说明

  • MD5 和 SHA-1 存在已知的碰撞攻击,不应用于安全目的。请仅将它们用于与安全无关的检查,例如将下载的文件与公布的校验和进行比对。
  • 哈希不是加密。本工具无法将哈希值还原为原始文本或文件。
  • 不要用普通哈希来存储密码。请使用专门的密码哈希方案,例如 Argon2、scrypt 或 bcrypt。
  • 哈希值根据字节计算,因此同样的文本如果换行符不同(CRLF 或 LF)、字符编码不同或多了空格,得到的哈希值也不同。
  • HMAC 将哈希与密钥结合使用。此处不提供 HMAC-MD5。
  • 文本和文件在您的浏览器中处理,不会发送到 LeedyBox。非常大的文件可能处理较慢,因为整个文件会被读入内存。

使用前请检查结果。 本工具按“原样”提供,不附带任何保证,结果可能不完整或有误。 服务条款

MD5 和 SHA-1 不适合用于安全目的。哈希不是加密;校验和一致只能说明数据与生成该校验和的数据相同。

使用方法

  1. 在“输入”中选择“文本”可对输入或粘贴的文本计算哈希,选择“文件”可对设备上的文件计算哈希。
  2. 对于文件,请选择文件或将其拖放到框中,然后点击“计算哈希”。之后如果更改了“HMAC 模式”或密钥,需要再次点击该按钮。
  3. 在“输出格式”中选择小写十六进制、大写十六进制或 Base64。更改格式只会改变同一结果的书写方式,不会重新计算。
  4. 如需计算 HMAC 而不是普通哈希,请勾选“HMAC 模式”,并在出现的输入框中输入密钥。本工具不提供 HMAC-MD5,因此 MD5 一行会显示“不支持 HMAC”。
  5. 要验证下载的文件,请将公布的值粘贴到“预期校验和(可选)”中。它会与所有已计算的结果进行比较,匹配的行会标记为“一致”。

常见问题

为什么我的哈希与 sha256sum 或其他工具的结果不同?

文本框会按输入的字符原样计算哈希,因此细微差别也会改变结果。常见原因是末尾的换行:echo hello | sha256sum 会对“hello”加一个换行符计算哈希,因此与只对“hello”计算的 SHA-256 不同,而 printf hello | sha256sum 不会添加换行。看起来相同的字符也可能以不同方式存储,例如 é 可以是一个码位,也可以是 e 后接一个组合重音符。若要按文件的原始字节计算哈希,请使用“文件”,而不要粘贴其内容,因为文本框会将文本编码为 UTF-8,并把换行按 LF 计算哈希。

公布的校验和没有错,为什么显示不匹配?

请只粘贴哈希值。比较前会删除空格、制表符和换行,因此如果粘贴校验和文件中的整行,文件名会成为值的一部分;带有 sha256: 之类的前缀也无法匹配。工具会与所有已计算的算法进行比较,因此无需选择算法。如果只粘贴了值仍不匹配,请确认“HMAC 模式”已关闭,并且该校验和使用的是 MD5、SHA-1、SHA-256、SHA-384 或 SHA-512;SHA-3、BLAKE2 等其他算法在这里不会计算。否则,文件很可能与生成校验和的文件不同,例如版本不同或下载不完整。

结果以 e3b0c442 或 d41d8cd9 开头是什么意思?

这是空输入(0 字节)以十六进制表示的哈希值:SHA-256 值以 e3b0c442 开头、以 b855 结尾,MD5 值为 d41d8cd98f00b204e9800998ecf8427e。在“HMAC 模式”关闭时,清空文本框后或选择 0 字节的文件时会看到这些值。如果您自己的程序对本应有内容的数据得出了这些值,它很可能是对空字符串或空文件计算了哈希。

可以用 HMAC 模式验证 Webhook 或 API 签名吗?

如果签名是使用 SHA-1、SHA-256、SHA-384 或 SHA-512 的 HMAC,很多情况下可以;本工具不提供 HMAC-MD5。勾选“HMAC 模式”,输入签名密钥,将请求正文作为输入,并把签名去掉 sha256= 之类的前缀后粘贴到“预期校验和(可选)”中;十六进制和 Base64 签名都能识别。输入必须与被签名的字节相同,因此重新格式化过的 JSON 正文无法匹配,含 CRLF 换行的正文需要保存为文件并用“文件”计算。许多服务签名的不只是正文,例如还会在正文前加上时间戳和分隔符,因此请查阅服务文档,确认具体签名的是哪些内容。

我的密钥是十六进制或 Base64 格式,可以使用吗?

仅当服务直接使用密钥文本时才可以。“密钥(UTF-8)”输入框使用所输入字符的 UTF-8 字节,不会解码十六进制或 Base64,因此如果服务在签名前先解码密钥,这里计算的 HMAC 将无法匹配。输入框开头或结尾的空格也会被视为密钥的一部分。

如何生成子资源完整性(SRI)哈希?

选择“文件”,选中脚本或样式表文件,确认“HMAC 模式”已关闭,点击“计算哈希”,并将“输出格式”设为“Base64”。在 SHA-384 值前加上 sha384- 即可得到 integrity 属性的值,sha256- 和 sha512- 的用法相同。该文件必须与浏览器下载的文件逐字节相同,否则浏览器会拒绝使用它。从其他源(origin)加载的文件还需要 crossorigin 属性,并且其服务器必须允许 CORS。

十六进制输出和 Base64 输出有什么区别?

两者表示的是同一个摘要。十六进制每个字节用两个字符表示,SHA-256 为 64 个字符,也是 sha256sum 等工具输出的格式;Base64 更短,SHA-256 为 44 个字符。Base64 输出使用带 +、/ 和 = 填充的标准字母表,而不是使用 - 和 _ 的 URL 安全变体,因此 URL 安全变体的值,或去掉了 = 填充的值,在比较时可能无法匹配。