使用方法
- 在输入框粘贴或输入文本。页面已预置示例「柳泉工具 liuquan.net」(16 个字符,UTF-8 编码后 24 个字节),打开时表格里就是它的四种摘要。
- 点「重新计算」或在输入框里按 Ctrl+Enter(Mac 用 Cmd+Enter),四行摘要实时重算;Enter 键保留给换行,可输入多行文本一起参与计算。
- 看表格:每行给出算法名、摘要全文、位长和十六进制字符数——MD5 是 32 字符,SHA-1 是 40,SHA-256 是 64,SHA-512 是 128,位长除以 4 永远等于字符数。
- 点「雪崩演示」:工具把输入的最后一个字符换成 X(末字符已是 X 则换成 Y),重新算一遍并与原摘要逐位对比,输出每种算法有几位十六进制字符不同。
- 点「复制结果」带走纯文本,或点「导出 CSV」存成带表头的表格文件(带 BOM,Excel 打开不乱码)。
这个在线哈希生成器能解决什么问题
一是搞懂四种算法到底差在哪:单独打开某个算法的工具页只能看到一个摘要,把四种摆进同一张表,128、160、256、512 位的长度差异和 32、40、64、128 的字符数差异一眼可比,这正是本页存在的意义。
二是验证两段内容是否一字不差:把文件说明页上的校验值粘过来对比,或用雪崩演示确认「只动了一个字符」时摘要确实面目全非——这是哈希确定性与敏感性的直观教学。
三是核对接口文档的示例值:写代码对接签名接口时,文档里的 MD5 示例值和自己算的对不上,用本页快速判断是编码问题(UTF-8 还是 GBK)还是算法选错了行。
四是给文本起一个固定长度的指纹:256 位摘要只有 64 个字符,无论原文是 3 个字节还是 488 KB,长度都不变,适合当作去重键或对比标识使用。
本页不做这些事:不深入单个算法的参数与安全分析(MD5 的细节归「MD5加密」页、SHA-256 的归「SHA256加密」页管)、不做大文件校验(本页按文本处理,上限 500000 字节)、不提供加盐或密钥派生。
原理与规则说明:两条计算路径
MD5 与 SHA 家族在本页走的是两条完全不同的路径。MD5 由页内自实现,因为浏览器的 Web Crypto 接口出于算法白名单考虑不提供 MD5。实现严格按 RFC 1321:先把输入补齐——追加一个 0x80 字节,再补 0 直到长度模 64 余 56,末尾写 64 位小端序的位长;然后以 67452301、efcdab89、98badcfe、10325476 四个寄存器初值出发,对每个 64 字节分块跑 64 轮循环,四轮分别使用不同的非线性函数;轮常数 K[i] 按定义取 floor(2^32 × |sin(i + 1)|) 在页内现算,四轮移位表依次是 7/12/17/22、5/9/14/20、4/11/16/23、6/10/15/21。这段实现在上线前与标准库对拍过空串、英文、中文、1000 字节长串共多组,逐字符一致。
SHA-1、SHA-256、SHA-512 调用 crypto.subtle.digest(algorithm, bytes),算法行为由 FIPS 180-4 定义,实现在浏览器内部,页面只负责喂字节和收摘要。Web Crypto 要求安全上下文(https 或 localhost),不满足时本页会明确提示,而不是静默给出空结果。
两条路径的输入都先经 TextEncoder.encode 转成 UTF-8 字节——哈希算的是字节不是字符。示例文本「柳泉工具 liuquan.net」16 个字符里 4 个汉字各占 3 字节、12 个 ASCII 字符各占 1 字节,进摘要的是 24 字节。换一种编码(比如 GBK)算出的摘要就完全不同,这是接口核对时最常见的翻车点。
输出统一为小写十六进制:n 位摘要每 4 位写成一个十六进制字符,所以 128 位出 32 字符、512 位出 128 字符,字符数 = 位长 ÷ 4,永远成立。大写写法与小写是同一个值的两种排版,比较时建议先统一大小写。
完整示例(数值仅作演示)
在线哈希生成器预置的示例输入是「柳泉工具 liuquan.net」,下面四种摘要就是它算出来的,与表格、结果区三处相同:
- MD5(128 位):
7cf80824654c6f4cfb31e6d78b0615b6; - SHA-1(160 位):
4c22ba9665354a030a6a7a1e42b39ced8000bfa4; - SHA-256(256 位):
397e48e7ffcc40428ccc6b5edb72123ea790896c258b05ea26efd3f821b855b7; - SHA-512(512 位):
f5bdb4e0f4597975918bcf90646acfb8aa1a53785357687a11ab80b9165f0ee94c86e0132d73dffc4c04393ed5fe730821af25607ee27896e884ae6b092f8a3e。
把这串输入的末字符 t 换成 X,得到「柳泉工具 liuquan.neX」,再算一遍:MD5 有 29/32 个十六进制位变得不同、SHA-1 是 35/40、SHA-256 是 62/64、SHA-512 是 120/128——没有一行保持相似,剩下的那几个相同位只是随机碰撞,不是规律。改后的 SHA-256 摘要是 8fb540cbe99a588ce1dc25154cc35374bffa66414a07b842ac14ed9e39651481,与原摘要共同位置逐位对比即可复验。点工具区的「雪崩演示」可以对任意输入现场重演这一过程。
算法参数与对照表
四种算法的关键参数放在一起看:
| 算法 | 定义标准 | 摘要位长 | 十六进制字符数 | 输出空间 | 理想生日碰撞阻力 |
|---|---|---|---|---|---|
| MD5 | RFC 1321(1992) | 128 位 | 32 | 约 3.403×1038 | 约 1.8447×1019 |
| SHA-1 | FIPS 180-4 | 160 位 | 40 | 约 1.462×1048 | 约 1.2089×1024 |
| SHA-256 | FIPS 180-4 | 256 位 | 64 | 约 1.158×1077 | 约 3.4028×1038 |
| SHA-512 | FIPS 180-4 | 512 位 | 128 | 约 1.341×10154 | 约 1.1579×1077 |
「理想生日碰撞阻力」指 birthday attack 理论下找到碰撞约需 2^(n/2) 次运算。注意这只是理想值:MD5 的实际碰撞早已可以在普通计算机上按构造方法直接生成,SHA-1 也被 2017 年的 SHAttered 攻击以约 2^63 次运算量实际击穿,两者都已退出安全用途,本页列出它们主要用于对比和校验历史数据。
输入范围、边界与精度说明
- 空字符串也有摘要:MD5 是
d41d8cd98f00b204e9800998ecf8427e,SHA-1 是da39a3ee5e6b4b0d3255bfef95601890afd80709。这不是 bug——摘要函数对任何字节序列(包括零字节)都有定义,清空输入框就能现场验证。 - 输入上限 500000 字节(约 488.3 KiB,按 UTF-8 计):超出时在线哈希生成器会拒绝并报出实际字节数。限制的理由是页面交互而非算法——摘要本身没有长度限制,但浏览器对单次字符串操作的内存与响应时间有实际约束,超长文本建议改用命令行工具。
- 换行与空格都参与计算:末尾多一个换行符,摘要就完全不同。从别处粘贴时若摘要对不上,先检查有没有带回行尾空格或不同的换行风格。
- 多行文本按 UTF-8 字节流整体进摘要,行与行之间的
\n(1 个字节)也是输入的一部分。 - 摘要不可逆:从摘要推不回原文,本页也不提供任何「解密」入口;网上声称能「反查 MD5」的服务只是查彩虹表,对随机输入无效。
- Web Crypto 不可用时只有 MD5 一行能算:SHA 三行会显示占位并给出原因(缺安全上下文或浏览器过旧),不会伪造结果。
- 雪崩演示只改一个码元:替换的是输入最后一个字符,若输入以表情符号等双码元字符结尾,替换发生在整个码元上,依然是「改一处」。
常见问题
为什么 MD5 要在页面里自己实现,SHA 不用?
Web Crypto 的算法白名单出于安全考虑只收录 SHA 家族等现代算法,MD5 不在其中。所以本页按 RFC 1321 用约 40 行代码自实现 MD5,并与标准库对拍过;SHA 三种则直接调用浏览器原生接口,两者输出格式完全一致。
同一段内容每次计算的结果都一样吗?
一样。摘要是确定性函数,同一字节序列永远得到同一摘要,没有随机成分——这正是它能当校验值的原理。如果两次结果不同,说明两次输入的字节不同,去查编码和行尾。
改一个字符为什么几乎每一位都变了?
这就是雪崩效应,是摘要算法刻意设计的性质:输入任何一位变化,输出每一位都有约一半概率翻转。实测示例里 SHA-256 有 62/64 个十六进制位不同,剩下的相同位纯属随机,不代表任何关联。
两个不同输入会出现相同摘要吗?
理论上必然可能——输出空间有限而输入无限(鸽笼原理)。MD5 输出约 3.403×10^38 种,理想生日阻力约 1.8447×10^19,但它的碰撞已被实际构造出来,不能用于安全场景;SHA-256 的碰撞阻力约 3.4028×10^38,按目前算力不可触及。
能用这个页算密码的哈希来存用户吗?
绝对不要。密码存储需要专门的慢哈希加盐方案(bcrypt、scrypt、Argon2 这类),通用摘要在 GPU 上每秒可算上百亿次,直接存摘要等于裸奔。本页的定位是对比与校验,不是口令存储。
中文和 emoji 是怎么参与计算的?
先经 TextEncoder 编码成 UTF-8 字节再进摘要:常用汉字 3 字节,部分生僻字 4 字节,多数 emoji 也是 4 字节。示例文本 16 个字符编码后是 24 字节,字符数与字节数不相等时,字节才是真正的输入。
为什么摘要有时对不上文档给的示例值?
三个最常见原因:编码不同(UTF-8 与 GBK)、输入多了或少了行尾换行、对方给的是大写十六进制而逐字符比较时区分了大小写。先统一编码与大小写,再逐位核对。
SHA-1 还能用吗?它比 MD5 强多少?
校验历史文件仍可用,安全场景不要再用。它比 MD5 多 32 位输出,理想生日阻力高约 6.5×10^4 倍,但 2017 年已被以约 2^63 次运算的实际碰撞击穿,迁移到 SHA-256 以上是明确结论。
相关工具
- MD5加密:只想算 MD5 一个算法、看它的参数细节与安全分析时用这页。
- SHA256加密:单算法深挖 SHA-256,含使用场景与安全建议。
- SHA-1哈希生成器:单独计算 SHA-1,适合核对旧系统的校验值。
- SHA-512哈希生成器:需要最长摘要时单独计算 SHA-512。
- 哈希类型识别:手里只有一串摘要不知道是什么算法时,先识别再选工具。
- 暴力破解时间计算器:估算给定算力下穷举一段口令空间需要多久。
- 编码解码:查看全部编码解码工具。