如何使用哈希生成器
- 输入或粘贴您要计算哈希的文本。
- MD5、SHA-1、SHA-256、SHA-384 和 SHA-512 摘要会随着您的输入实时计算,并以十六进制显示。
- 要校验某个值,请把预期的哈希粘贴到比较栏中,工具会告诉您是否匹配。
哈希通过 Web Crypto API 和 JavaScript 在您的浏览器中计算,您输入的内容不会被上传或存储。
什么是加密哈希?
哈希函数可以把任意长度的输入转换为固定长度的指纹,称为摘要。一个好的加密哈希具有以下特点:
- 确定性:相同的输入总是产生相同的摘要。
- 单向性:实际上无法从摘要中还原出输入。
- 抗碰撞:几乎不可能找到两个摘要相同的不同输入。
- 敏感性:输入哪怕只改变一位,输出的大约一半位数也会随之改变。
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-256("hello\n")= 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03
如何选择算法
| 算法 | 摘要长度 | 状态 |
|---|---|---|
| MD5 | 128 位 | 已被攻破:在普通硬件上也能快速生成碰撞。仅适用于与安全无关的校验和。 |
| SHA-1 | 160 位 | 抗碰撞性已被攻破:已公开演示了可行的碰撞攻击。正在被逐步淘汰。 |
| SHA-256 | 256 位 | 安全,是目前最常见的选择。 |
| SHA-384 / SHA-512 | 384 / 512 位 | 安全;在 64 位 CPU 上,SHA-512 可能比 SHA-256 更快。 |
对于任何与安全相关的用途(签名、证书、来自不可信镜像的下载文件的完整性校验),请使用 SHA-256 或更强的算法。MD5 和 SHA-1 只适合在没有人试图伪造匹配的情况下,用来检测意外损坏。
常见陷阱
哈希不是加密
加密可以用密钥还原,而哈希完全不可逆。您无法“解密”哈希。不过,较短或常见的输入仍然可以通过猜测找到:攻击者只需对候选值逐一计算哈希,直到有一个匹配为止,这就是常见单词的 MD5 查询表存在的原因。
切勿用普通的快速哈希存储密码
MD5、SHA-1 甚至 SHA-256 都被设计得很快,这让攻击者能在 GPU 上每秒尝试海量的密码猜测。请使用专门设计的、刻意放慢速度且带盐的密码哈希函数来存储密码:Argon2id、scrypt 或 bcrypt。它们会为每个密码添加唯一的盐,并提供可调节的工作因子。
# 不要这样做
stored = sha256(password)
# 应该这样做(Python,argon2-cffi)
from argon2 import PasswordHasher
stored = PasswordHasher().hash(password)
输入中看不见的差异
末尾的换行符、Windows 换行符(\r\n)或不同的 Unicode 规范化方式,都会产生完全不同的哈希。echo hello | sha256sum 计算的是 hello\n 的哈希;请使用 printf 'hello' 或 echo -n 来得到与上面一致的结果。本工具计算的是您所输入内容的 UTF-8 字节的哈希,不多也不少。
校验文件的校验和
软件下载页面通常会公布 SHA-256 校验和。请计算您所下载文件的哈希,并与公布的值进行比较:
| 系统 | 命令 |
|---|---|
| Linux | sha256sum file.iso |
| macOS | shasum -a 256 file.iso |
| Windows PowerShell | Get-FileHash file.iso -Algorithm SHA256 |
| Windows cmd | certutil -hashfile file.iso SHA256 |
在 Linux 上,sha256sum -c SHA256SUMS 会检查校验和文件中列出的每个文件。校验和只能证明文件与发布者计算哈希时的文件一致;只有当校验和本身来自可信来源(例如已签名的文件或 HTTPS 页面)时,才能证明文件是真实的。您可以用 SSL证书检测确认网站的证书。
常见问题
哈希可以被逆向或解密吗?
不可以。哈希函数在设计上就会丢弃信息。较短或常见的输入可以通过猜测并比较来找出,但无法通过逆向函数还原。
MD5 现在还安全吗?
用于安全用途已经不安全。碰撞很容易生成,因此 MD5 不得用于签名、证书或密码。不过,用来发现文件的意外损坏,或者作为缓存键,仍然没有问题。
密码应该用哪种哈希?
本页上的这些都不适合。请通过维护良好的库使用 Argon2id、scrypt 或 bcrypt,它们会替您处理加盐和工作因子。
为什么我的哈希与其他工具的不同?
通常是因为输入不同:多了一个换行符或空格、字符编码不同,或者对文件和对其文本内容分别计算了哈希。请比较实际被计算哈希的确切字节。
更新于