在线哈希生成器

同一段文本一次性算出 MD5、SHA-1、SHA-256、SHA-512 四种摘要,横向对比摘要位长与十六进制字符数,还能演示只改一个字符带来的雪崩效应。

算法摘要(小写十六进制)位长字符数
MD57cf80824654c6f4cfb31e6d78b0615b6128 位32
SHA-14c22ba9665354a030a6a7a1e42b39ced8000bfa4160 位40
SHA-256397e48e7ffcc40428ccc6b5edb72123ea790896c258b05ea26efd3f821b855b7256 位64
SHA-512f5bdb4e0f4597975918bcf90646acfb8aa1a53785357687a11ab80b9165f0ee94c86e0132d73dffc4c04393ed5fe730821af25607ee27896e884ae6b092f8a3e512 位128
示例展示(演示值,输入为「柳泉工具 liuquan.net」,16 个字符 / 24 个 UTF-8 字节):
MD5     7cf80824654c6f4cfb31e6d78b0615b6
SHA-1   4c22ba9665354a030a6a7a1e42b39ced8000bfa4
SHA-256 397e48e7ffcc40428ccc6b5edb72123ea790896c258b05ea26efd3f821b855b7
SHA-512 f5bdb4e0f4597975918bcf90646acfb8aa1a53785357687a11ab80b9165f0ee94c86e0132d73dffc4c04393ed5fe730821af25607ee27896e884ae6b092f8a3e

提示:四行摘要由两条路径算出——MD5 在页内按标准文档自实现,SHA 家族调用浏览器原生加密接口。表格里预置的就是这段示例文本的真实摘要,点「重新计算」会实时重算。

使用方法

  1. 在输入框粘贴或输入文本。页面已预置示例「柳泉工具 liuquan.net」(16 个字符,UTF-8 编码后 24 个字节),打开时表格里就是它的四种摘要。
  2. 点「重新计算」或在输入框里按 Ctrl+Enter(Mac 用 Cmd+Enter),四行摘要实时重算;Enter 键保留给换行,可输入多行文本一起参与计算。
  3. 看表格:每行给出算法名、摘要全文、位长和十六进制字符数——MD5 是 32 字符,SHA-1 是 40,SHA-256 是 64,SHA-512 是 128,位长除以 4 永远等于字符数。
  4. 点「雪崩演示」:工具把输入的最后一个字符换成 X(末字符已是 X 则换成 Y),重新算一遍并与原摘要逐位对比,输出每种算法有几位十六进制字符不同。
  5. 点「复制结果」带走纯文本,或点「导出 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」,下面四种摘要就是它算出来的,与表格、结果区三处相同:

把这串输入的末字符 t 换成 X,得到「柳泉工具 liuquan.neX」,再算一遍:MD5 有 29/32 个十六进制位变得不同、SHA-1 是 35/40、SHA-256 是 62/64、SHA-512 是 120/128——没有一行保持相似,剩下的那几个相同位只是随机碰撞,不是规律。改后的 SHA-256 摘要是 8fb540cbe99a588ce1dc25154cc35374bffa66414a07b842ac14ed9e39651481,与原摘要共同位置逐位对比即可复验。点工具区的「雪崩演示」可以对任意输入现场重演这一过程。

算法参数与对照表

四种算法的关键参数放在一起看:

算法定义标准摘要位长十六进制字符数输出空间理想生日碰撞阻力
MD5RFC 1321(1992)128 位32约 3.403×1038约 1.8447×1019
SHA-1FIPS 180-4160 位40约 1.462×1048约 1.2089×1024
SHA-256FIPS 180-4256 位64约 1.158×1077约 3.4028×1038
SHA-512FIPS 180-4512 位128约 1.341×10154约 1.1579×1077

「理想生日碰撞阻力」指 birthday attack 理论下找到碰撞约需 2^(n/2) 次运算。注意这只是理想值:MD5 的实际碰撞早已可以在普通计算机上按构造方法直接生成,SHA-1 也被 2017 年的 SHAttered 攻击以约 2^63 次运算量实际击穿,两者都已退出安全用途,本页列出它们主要用于对比和校验历史数据。

输入范围、边界与精度说明

常见问题

为什么 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 以上是明确结论。

相关工具