哈希生成器
在你的机器上计算的真实摘要:MD5、SHA-1、SHA-256、SHA-384、SHA-512 和 HMAC-SHA-256,可处理输入的文本或拖入的文件。这正是 AI 对话最不擅长的活——让聊天机器人算哈希,它会编出一个看起来完美、却与任何东西都不匹配的字符串,因为它是在预测文本而不是计算。这里算法是真的在运行,文件从不上传,答案是算出来的摘要,而不是猜测。
- MD5
- —
- SHA-1
- —
- SHA-256
- —
- SHA-384
- —
- SHA-512
- —
- HMAC-SHA-256
- 输入密钥,计算上方文本或文件的 HMAC。
为什么算出来的哈希和编出来的哈希长得一模一样
哈希是一种有个奇特属性的指纹:输入改动一个比特,输出大约有一半比特翻转。哈希空间里没有“接近”一说,没有任何模式可供文本预测器依附——对一个没有真正运行过算法的模型来说,SHA-256 的 64 个十六进制字符与随机数无从区分。于是聊天机器人只能做它唯一会做的事:生成 64 个看起来随机的十六进制字符,格式完美,内容全错。有人把这种编造写进过发布说明、校验指南和事故报告,因为这串字符看起来毫无破绽。防御办法无聊但彻底:绝不接受任何无法展示计算过程的来源给出的摘要。本页面的计算过程是构造上透明的——MD5 是照着 RFC 1321 公开实现的(WebCrypto 有意不提供 MD5,所以提供 MD5 的页面要么自己写了,要么在造假),SHA 家族通过浏览器自身的 WebCrypto 运行,拖入的文件用本地 File API 读取并就地计算。任何内容都不上传,这一点很重要,因为人们拿来算哈希的文件往往正是敏感文件:保密协议下的固件镜像、数据库转储、生产主机上的那个确切二进制文件。
另外两个邻居工具补齐了这一组。如果你手里有一个哈希,问题是“这是用什么算的?”,哈希识别器会读取它的长度、字母表和前缀并列出候选——诚实地,包括那些仅凭形状无法区分的。而另一个经典混淆是可逆与单向的区别,文章 Base64 不是加密 区分了编码(可逆、无密钥)、加密(可逆、有密钥)和哈希(单向、无密钥)——这三个概念的混淆写满了泄露报告。如果要检查的是线上服务器的证书而不是文件,SSL 证书检查和 SSL 评级负责同一工作的网络侧。
常见问题
AI 聊天机器人不能直接帮我算哈希吗?
它能递给你一个看起来完全像哈希的字符串——SHA-256 的 64 个自信的十六进制字符——而那个字符串将是编造的。语言模型不计算摘要;它预测文本,而哈希恰恰是“看起来合理”和“正确”毫无交集的那种文本。它也无法对它读不到的文件算哈希。本页面在你自己的机器上计算真实摘要,用的算法与你的操作系统相同——如果输入是文件,文件不会离开浏览器。主打文章 不要让聊天机器人碰你的密钥 逐一讲解了三种失败模式。
MD5 都已经被攻破了,为什么这里还有它?
因为世界上还在发布 MD5 校验和。厂商下载页、遗留系统、旧数据库转储和十年的论坛帖子都把 MD5 当指纹用,而拿下载文件去比对它公布的 MD5,就需要生成一个真实的 MD5——WebCrypto 拒绝做这件事,所以本页面的实现是照 RFC 1321 写的,并以 RFC 自带的测试向量钉死。抗碰撞被攻破意味着它不能用于安全决策;但这并不抹掉存量。用它验证遗留指纹,绝不要用它保护任何新东西。
什么是 HMAC,为什么它需要密钥?
普通哈希证明一条消息与某个摘要匹配;它不证明是谁生成的,因为任何人都能对任何东西算哈希。HMAC 把密钥混入构造之中,于是摘要同时认证了发送者——webhook 和签名 API 请求就是这样自证的。在这里输入相同的文本和密钥,你会得到你的代码应该产生的值,全程本地计算,生产环境的 webhook 密钥永远不必为了调试而粘贴进对话或陌生人的服务器。
应该用这些算法来哈希密码吗?
不应该。这些是快速的通用摘要,而“快”恰恰是密码哈希最不能要的——攻击者用 GPU 每秒能试几十亿次。密码属于 bcrypt、scrypt 或 Argon2,它们被故意设计得很慢并带盐。如果你有一个哈希、想知道它是什么生成的,哈希识别器会读取它的形状;如果你需要一个新密码,密码生成器会在本地生成。
十六进制大写还是小写,有区别吗?
对摘要本身没有:十六进制只是一种记法,A-F 与 a-f 是排版问题。对比较有区别,因为逐字节的字符串比较会把同一个哈希判成不同。这个开关会一次性重写所有输出,让你能对齐所比对校验和的格式——多数 Unix 工具输出小写,一些 Windows 工具输出大写。