哈希摘要
编码在线 MD5、SHA1、SHA256 哈希计算
哈希摘要在日常开发中出现的场合非常固定:核对下载文件的校验值、按接口文档拼出签名、确认两份数据是否一字不差、给日志里的手机号做脱敏标识。这些都不需要密钥,只需要一个结果稳定、编码明确的计算入口。
这个页面提供 MD5、SHA1、SHA256、SHA512 四种算法,输入统一按 UTF-8 编码后参与运算,输出小写十六进制——和 Java 的 MessageDigest、PHP 的 hash()、Python 的 hashlib 在默认设置下结果一致,所以可以直接拿来验证后端实现有没有写错。除整段计算外,还有「每行 MD5」和「每行 SHA256」两个批量入口,按换行拆分后逐行计算并保持行序,适合处理从表格里粘出来的一列数据。
与需要把内容 POST 到服务端的在线工具相比,这里的计算全部发生在浏览器内,输入不会离开本机。哈希的输入常常是密码、私钥片段、内部 ID 或用户手机号,这类内容一旦提交给第三方服务器就等于泄露,即使对方声称不记录也无法验证。纯前端实现让这个问题从「信任承诺」变成「不需要信任」。
使用时请注意两点表述上的严谨性。哈希不是加密,它不可逆、没有密钥,因此不要指望从摘要还原原文;同时摘要相同只能说明输入极可能相同,理论上仍存在碰撞,MD5 和 SHA1 的碰撞已经可以被主动构造,涉及安全判定时请改用 SHA256 及以上。另外,比对失败时最先要怀疑的往往不是算法,而是编码方式和结尾那个看不见的换行。
功能一览
- MD5:输出 32 位小写十六进制摘要,适合做文件或字符串的快速一致性比对
- SHA1:输出 40 位小写十六进制摘要,主要用于对接仍在使用它的老系统
- SHA256:输出 64 位小写十六进制摘要,目前接口签名与完整性校验的首选
- SHA512:输出 128 位小写十六进制摘要,摘要更长、抗碰撞余量更大
- 每行 MD5:按换行拆分输入,逐行计算并保持行序,输出行数与输入一致
- 每行 SHA256:同样按行批量计算,便于给一列 ID 或手机号统一生成摘要
- 输入统一按 UTF-8 编码后参与运算,与后端 Java、PHP、Python 的默认行为对齐
- 左右双栏对照,实时显示行数与字符数,摘要可一键复制,输入输出自动保存在浏览器本地
常见问题
- MD5 能解密吗?为什么有网站说能「解密」?
- 不能。MD5 是单向哈希而非加密,任意长度的输入都被压缩成固定 16 字节,过程中丢失了信息,数学上不存在逆运算。那些声称能解密的网站做的是彩虹表查询,即事先把大量常见字符串算好摘要存进数据库再反查,只对弱口令和短文本有效。这也说明 MD5 不适合存储密码,密码应使用 bcrypt、scrypt 或 Argon2 这类带盐的慢哈希。
- MD5 和 SHA1 还能用吗?该选哪个算法?
- MD5 和 SHA1 都已被证明可以在可接受成本内构造碰撞,不应再用于数字签名、证书或任何防篡改场景;但用于校验文件传输是否完整、比对两段文本是否相同,它们仍然够用且更快。新系统请默认选 SHA256,对摘要长度有更高要求时用 SHA512。任何一种都不适合直接用来保存用户密码。
- 哈希值的大小写有区别吗?
- 没有。十六进制里的 a 到 f 和 A 到 F 表示同一个数值,所以同一个摘要写成大写或小写是完全等价的,比对时把两边统一转成同一种大小写即可。本工具输出小写,这也是 OpenSSL 命令行和多数语言库的默认形式。如果对方系统给的是大写摘要,不必转换算法,忽略大小写直接比较就行。
- 为什么我在这里算的哈希和后端算出来的不一样?
- 按出现频率排查三件事。一是字符编码,同一段中文用 UTF-8 和 GBK 会得到完全不同的摘要,本工具固定用 UTF-8;二是输入里有看不见的字符,比如复制时带上的尾随空格、行末的 \r 或结尾多出的换行;三是对方算的其实不是纯哈希,而是 HMAC 或加了盐、拼了密钥的字符串。建议先用 abc 这样的纯 ASCII 短串对齐两边实现,再回来查数据本身。
- 能对文件计算哈希吗?
- 不能,本工具只处理输入框里的文本,不支持上传或读取文件。校验文件建议用命令行,效率更高也不受浏览器内存限制:macOS 与 Linux 上执行 shasum -a 256 文件名(或 md5 文件名),Windows PowerShell 里执行 Get-FileHash 文件名 -Algorithm SHA256。得到的摘要可以直接和这里算出的文本摘要按同样规则比较。
- 输入的密码或密钥会被上传吗?
- 不会。摘要由页面内加载的 crypto-js 在你的浏览器中计算,整个过程不发起任何网络请求,页面加载完成后断网也能正常使用。为了刷新后能恢复现场,输入与输出会写入本机的 localStorage,不会同步到别处。在公用电脑上处理过敏感串之后,点一下「清空」即可把记录删掉。