哈希生成器
在浏览器中运行,不上传任何内容
计算文本或文件的 MD5、SHA-1、SHA-256、SHA-384 和 SHA-512 哈希及 HMAC,并与你已有的哈希进行比对。
Input
Hashes
Nothing to hash yet
什么是哈希?
哈希函数会把任意输入转换成固定长度的指纹。相同的输入总是得到相同的哈希,改动一个字节就会得到完全不同的哈希,而且无法从哈希反推出输入。MD5 产生 128 位,SHA-1 产生 160 位,SHA-256、SHA-384 和 SHA-512 产生的位数与名称中的数字一致,这里以十六进制或 Base64 显示。
开发者用哈希来检查数据是否被改动:下载页面会列出 SHA-256 校验和,方便你确认收到的文件就是发布的那个。HMAC 是混入了密钥的哈希。Webhook 提供方和许多 API 会用 HMAC-SHA256 为每个请求签名,接收方对原始请求体计算同样的 HMAC,以证明请求是真实的。
MD5 和 SHA-1 在安全上已经被攻破:攻击者可以构造出哈希相同的两个不同输入。它们仍然可以用来发现意外改动,但凡是可能有人试图伪造的场景,都应使用 SHA-256 或更强的算法。普通哈希也不适合用来存储密码;存储密码需要 Argon2、scrypt 或 bcrypt 这类加盐的慢速算法。
使用方法
- 1在 Input 面板中输入或粘贴文本。文本按 UTF-8 计算,哈希会随输入实时更新。
- 2要计算文件的哈希,选择 Hash a file(Ctrl+O)或把文件拖到输入区。文件的字节会在你的浏览器中按磁盘上的原样计算。
- 3选择输出格式:十六进制、大写十六进制或 Base64。用每行的按钮复制单个哈希,或用 Copy all 全部复制。
- 4要计算 HMAC,把模式切换为 HMAC 并输入密钥,可以是文本,也可以是十六进制字节。
- 5要核对别人给你的哈希,把它粘贴到 Compare。无论你粘贴的是十六进制、Base64 还是校验和文件中的一行,工具都会告诉你它与哪种算法匹配。
问题排查
- 我的哈希和命令行算出的不一致
- 哈希针对的是精确的字节。
echo会额外加一个换行,请使用echo -n或printf。末尾多一个空格或编码不同也会改变结果。 - 带 Windows 换行符的文本得到的哈希不同
- 浏览器会把编辑器中文本的换行转换为
\n,所以粘贴的文本是按 LF 换行计算的。要计算带 CRLF 换行的文件的精确字节哈希,请打开文件而不是粘贴。 - Webhook 签名对不上
- 请对收到的原始请求体计算 HMAC,在任何 JSON 解析或重新格式化之前进行,并使用相同的密钥和算法。有些提供方以 Base64 发送签名,有些用十六进制;Compare 两种都接受。
- 密钥不是有效的十六进制
- 在十六进制模式下,密钥必须由成对的 0–9 和 a–f 组成。把密钥格式切换为文本,即可按 UTF-8 使用密钥中的字符。
常见问题
我的文本或文件会发送到服务器吗?
不会。SHA-1 和 SHA-2 系列哈希由浏览器的 Web Crypto API 计算,MD5 由页面上的代码计算。文件在浏览器中读取,最大 200 MB,任何内容都不会离开你的设备。
哈希可以反向还原或解密吗?
不可以。哈希是单向的。声称能“破解” MD5 的网站,其实是在常见单词和密码的哈希表中查找,这只对强度很弱的输入有效。
应该用哪种算法?
校验和、签名以及任何与安全相关的场景,都用 SHA-256。SHA-384 和 SHA-512 同样安全。只有在现有系统要求时才使用 MD5 或 SHA-1。