哈希生成器:MD5、SHA-1、SHA-256、SHA-512 与 HMAC
在浏览器中计算文本或文件的 MD5、SHA-1、SHA-256、SHA-384、SHA-512 哈希值或 HMAC,并与预期的校验和比对。
文本按输入的原样计算哈希,包括空格和换行。此输入框中的换行按 LF 计算。
将文件拖放到此处,或选择文件
未选择文件。
此文件大于 500 MB。整个文件会被载入内存,浏览器可能内存不足或变慢。
结果
输入文本或选择文件即可查看哈希值。
十六进制值比对时不区分大小写;Base64 值必须完全一致。
说明
- MD5 和 SHA-1 存在已知的碰撞攻击,不应用于安全目的。请仅将它们用于与安全无关的检查,例如将下载的文件与公布的校验和进行比对。
- 哈希不是加密。本工具无法将哈希值还原为原始文本或文件。
- 不要用普通哈希来存储密码。请使用专门的密码哈希方案,例如 Argon2、scrypt 或 bcrypt。
- 哈希值根据字节计算,因此同样的文本如果换行符不同(CRLF 或 LF)、字符编码不同或多了空格,得到的哈希值也不同。
- HMAC 将哈希与密钥结合使用。此处不提供 HMAC-MD5。
- 文本和文件在您的浏览器中处理,不会发送到 LeedyBox。非常大的文件可能处理较慢,因为整个文件会被读入内存。
使用方法
- 在“输入”中选择“文本”可对输入或粘贴的文本计算哈希,选择“文件”可对设备上的文件计算哈希。
- 对于文件,请选择文件或将其拖放到框中,然后点击“计算哈希”。之后如果更改了“HMAC 模式”或密钥,需要再次点击该按钮。
- 在“输出格式”中选择小写十六进制、大写十六进制或 Base64。更改格式只会改变同一结果的书写方式,不会重新计算。
- 如需计算 HMAC 而不是普通哈希,请勾选“HMAC 模式”,并在出现的输入框中输入密钥。本工具不提供 HMAC-MD5,因此 MD5 一行会显示“不支持 HMAC”。
- 要验证下载的文件,请将公布的值粘贴到“预期校验和(可选)”中。它会与所有已计算的结果进行比较,匹配的行会标记为“一致”。
常见问题
为什么我的哈希与 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 安全变体的值,或去掉了 = 填充的值,在比较时可能无法匹配。