使用方法
- 「待识别的哈希值」框服务端直出示例 d41d8cd98f00b204e9800998ecf8427e,脚本未执行时也不是空白。粘贴或输入后按 Enter,或点「识别算法」。
- 输入里的首尾空格会先被去掉:复制哈希时很容易连带一个尾随空格或换行,页面先 trim 再判定,避免把长度算错。
- 页面按「长度 + 字符集 + 前缀签名」三重匹配。先看有没有 $2a$、$argon2id$ 这类前缀,再按字符集判断是不是纯十六进制,最后用长度落到具体的候选列表。
- 结果区列出全部候选算法。同一长度的算法会一起给出,例如 32 位十六进制同时列 MD5、NTLM、MD4,而不是替你猜一个。
- 能唯一确定的只有带前缀的口令哈希:bcrypt 的 $2a$ / $2b$ / $2y$、Argon2 的 $argon2id$、PBKDF2 的 $pbkdf2$ 都把盐与参数写进了字符串,长度与字符集之外还多一层签名。
- 下方算法表列出本页覆盖的全部算法及其长度,默认展开六行,「加载更多」补全其余行;「复制对照表」取 TSV,「导出 CSV」下载带 UTF-8 BOM 的文件。
这个哈希值识别器能解决什么问题
在日志、数据库、抓包结果或配置里遇到一串看不出含义的定长字符串,第一件事往往是判断它是不是哈希、属于哪一种,这决定了后续该用什么工具去校验或生成。本页把「看一眼长度就大致知道是哪种」这件事做成一步操作:无需跑命令行、无需联网,粘贴即给候选。
它也能反向帮你避坑。很多系统把 40 位十六进制当成 SHA-1,其实也可能是 MySQL 的旧式 PASSWORD 函数输出;看到 32 位十六进制就断言是 MD5,同样忽略了 NTLM 与 MD4 这两条同长分支。本页坚持把同长算法并列列出,就是为了让使用者知道「长度只能缩小范围,不能落锤」。
识别与生成是互补的两件事:如果手里有一段明文、想知道它算出来长什么样,应该用 MD5 加密或 SHA256 加密工具生成;如果手里只有一串哈希、想判断它可能是哪一种,就用本页。两者配合可以完成一次「生成—比对—反推算法」的完整排查。
计算原理与变量说明
本页不改动输入,只做只读的判定。判定由三个维度叠加:长度、字符集、前缀签名。
- 长度:先数去掉空格后的字符数。32 位十六进制对应 MD5、NTLM、MD4,40 位对应 SHA-1 与 MySQL5,64 位对应 SHA-256 与 SHA3-256,128 位对应 SHA-512。
- 字符集:判断是不是纯十六进制(0 到 9、a 到 f)。非十六进制的 13 字符按 Base64 风格字符集识别为 Unix DES crypt;既不是十六进制又不带前缀的,给出「可能是 Base64 或其它编码」的提示。
- 前缀签名:以 $2a$、$2b$、$2y$ 开头判为 bcrypt,以 $argon2id$ 开头判为 Argon2id,以 $pbkdf2$ 开头判为 PBKDF2。
- 候选集合:满足全部命中的算法进入结果列表;本页不做权重排序、不投票、不猜唯一答案。
为什么 32 位十六进制至少有三种可能:MD5、NTLM、MD4 的输出长度都是 128 位,十六进制表示后都是 32 个字符,字符集也完全一致,仅凭字符串本身没有任何信息能把三者区分开。三者只在用途上不同——MD5 是通用摘要且已被碰撞攻破,NTLM 是 Windows 口令哈希且不带盐,MD4 更老且早已被淘汰——但字符串外观一模一样。示例 d41d8cd98f00b204e9800998ecf8427e 恰好是空串的 MD5,本身仍无法从字符判断它一定是 MD5。
为什么前缀型口令哈希可以唯一确定:bcrypt、Argon2、PBKDF2 为了自描述,把算法标识、代价参数与盐都编进了同一个字符串。例如 bcrypt 的 $2a$10$ 头里,$2a$ 指明算法变体、10 指明迭代代价的对数;Argon2id 的 $argon2id$ 直接写明模式。这些前缀是格式的一部分,因此看到即可确定算法,长度与字符集只作为辅助确认。
为什么识别只能给候选、不能还原原文:哈希是单向函数,设计目标就是无法从摘要反推出输入。长度与字符集只是对外观做分类,与明文之间没有任何可逆关系。要「还原」只能靠穷举或彩虹表去猜常见口令,这与识别算法是两回事。页面因此把结论表述为候选,并明确提示无法还原。
为什么 CRC32 要单独看待:它的输出是 8 位十六进制、与其它十六进制哈希外观相似,但它是校验和而非密码学哈希,设计目标是快速发现传输错误,既不加盐也不抗碰撞,任何人都能随意构造出碰撞。看到 8 位十六进制时,应先考虑它是 CRC32 而不是某种短哈希。
完整示例(数值仅作演示)
下面八条样例都由本页的判定逻辑复算得到,各自给出长度与候选算法。
- 32 位十六进制 d41d8cd98f00b204e9800998ecf8427e → 长度 32,候选并列 MD5 / NTLM / MD4。
- 32 位十六进制 5f4dcc3b5aa765d61d8327deb882cf99 → 长度 32,候选并列 MD5 / NTLM / MD4。
- 40 位十六进制 da39a3ee5e6b4b0d3255bfef95601890afd80709 → 长度 40,候选并列 SHA-1 / MySQL5。
- 64 位十六进制 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 → 长度 64,候选并列 SHA-256 / SHA3-256。
- 128 位十六进制 cf83e1357eefb8bd…(SHA-512 空串)→ 长度 128,候选 SHA-512。
- bcrypt 串 $2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy → 长度 60,前缀 $2a$,候选 bcrypt。
- 32 位十六进制 5d41402abc4b2a76b9719d911017c592(「hello」的 MD5)→ 长度 32,候选并列 MD5 / NTLM / MD4。
- 40 位十六进制 aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d(「hello」的 SHA-1)→ 长度 40,候选并列 SHA-1 / MySQL5。
示例数值均为演示,不代表对任何具体数据的还原结果;即便知道是 MD5,也无法从摘要反推出原来的 hello。
哈希算法长度与候选对照表
下表是八条样例的判定结果。可以看到同长度会稳定落到同一组候选,长度 32 的三条样例给出的都是 MD5、NTLM、MD4。
| 样例(节选) | 长度 | 候选算法 |
|---|---|---|
| d41d8cd98f00b204e9800998ecf8427e | 32 | MD5 / NTLM / MD4 |
| 5f4dcc3b5aa765d61d8327deb882cf99 | 32 | MD5 / NTLM / MD4 |
| da39a3ee5e6b4b0d3255bfef95601890afd80709 | 40 | SHA-1 / MySQL5 |
| e3b0c44298fc1c149afbf4c8996fb924… | 64 | SHA-256 / SHA3-256 |
| cf83e1357eefb8bd…(SHA-512) | 128 | SHA-512 |
| $2a$10$N9qo8uLOickgx2Z…(bcrypt) | 60 | bcrypt |
| 5d41402abc4b2a76b9719d911017c592 | 32 | MD5 / NTLM / MD4 |
| aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d | 40 | SHA-1 / MySQL5 |
下表列出本页覆盖的十二种算法及其长度与字符集。它是判定的核心依据:拿到一串字符先数长度,再到这张表里找对应的算法。
| 算法 | 长度(字符) | 位数 | 输出字符集 | 备注 |
|---|---|---|---|---|
| CRC32 | 8 | 32 | 十六进制 | 校验和,非密码学哈希 |
| MD5 | 32 | 128 | 十六进制 | 已被碰撞攻破 |
| SHA-1 | 40 | 160 | 十六进制 | 已被碰撞攻破 |
| SHA-224 | 56 | 224 | 十六进制 | SHA-2 家族 |
| SHA-256 | 64 | 256 | 十六进制 | 推荐 |
| SHA-384 | 96 | 384 | 十六进制 | SHA-2 家族 |
| SHA-512 | 128 | 512 | 十六进制 | 推荐 |
| SHA3-256 | 64 | 256 | 十六进制 | 与 SHA-256 同长 |
| bcrypt | 60 | — | 带 $2a$ 前缀 | 口令哈希,含盐 |
| Argon2id | 变长 | — | 带 $argon2id$ 前缀 | 口令哈希,推荐 |
| NTLM | 32 | 128 | 十六进制 | 与 MD5 同长,无盐 |
| Unix DES crypt | 13 | — | Base64 风格 | 仅前 8 字节有效 |
下表把长度单独抽出来,便于快速定位候选。它也是本页判定的执行顺序:先按长度缩小,再用字符集与前缀收窄。
| 长度(字符) | 候选算法 | 能否唯一确定 |
|---|---|---|
| 8 | CRC32 | 唯一(但属校验和) |
| 13 | Unix DES crypt | 唯一(Base64 风格) |
| 32 | MD5 / NTLM / MD4 | 不能,三种并列 |
| 40 | SHA-1 / MySQL5 | 不能,两种并列 |
| 56 | SHA-224 | 唯一 |
| 64 | SHA-256 / SHA3-256 | 不能,两种并列 |
| 96 | SHA-384 | 唯一 |
| 128 | SHA-512 | 唯一 |
结果边界、舍入与适用说明
- 输入先做 trim:首尾的空格与换行会被去掉再判定,避免把长度数错。
- 含非十六进制字符时给出「不是纯十六进制,可能是 Base64 或其它编码」的提示;带 $2a$ 或 $argon2id$ 前缀的串先按前缀命中,不受这条限制。
- 同长度一律并列:32 位给 MD5、NTLM、MD4,40 位给 SHA-1、MySQL5,64 位给 SHA-256、SHA3-256,页面不猜唯一答案。
- 长度落在 8、13、32、40、56、64、96、128 之外的十六进制串,若既不匹配任何算法长度也不带前缀,会提示未能匹配到已知算法。
- 识别不区分大小写:十六进制部分 a 到 f 与 A 到 F 视为同一字符集,因此大写写法的哈希同样能被识别。
- 本页只判定算法候选,不校验哈希是否正确、不比对明文,也不做任何还原;需要生成请用 MD5 加密或 SHA256 加密工具。
- 未被覆盖的算法(如 SHA-512/256、BLAKE2、Whirlpool 等)不会出现在候选里,这不代表输入的字符串不是哈希,只代表本页的长度表未收录。
- 页面只做只读的字符串分类:不改动哈希、不发送网络请求,结果完全由输入内容决定。
常见问题
为什么 32 位十六进制要列出 MD5、NTLM、MD4 三个而不是一个?
因为三者的输出都是 128 位,十六进制表示后都是 32 个字符,字符集也完全相同,仅凭字符串外观无法区分。示例 d41d8cd98f00b204e9800998ecf8427e 与 5d41402abc4b2a76b9719d911017c592 长度都是 32,页面一律并列 MD5、NTLM、MD4,不做猜测。
怎么才能唯一确定是哪种哈希?
只有带前缀签名的口令哈希才能唯一确定:bcrypt 用 $2a$ / $2b$ / $2y$,Argon2 用 $argon2id$,PBKDF2 用 $pbkdf2$,它们把算法与参数写进了字符串。其余固定长度的摘要算法只能给出候选集合,要唯一确定得结合上下文,例如系统文档写了用的是 SHA-256。
识别出来后能还原出原文吗?
不能。哈希是单向函数,设计目标就是无法从摘要反推输入,识别算法只做外观分类,与原文之间没有可逆关系。想知道原文只能靠穷举或彩虹表去猜常见口令,这属于暴力破解范畴,与识别是两回事。示例即便判定为 MD5,也还原不出原来的 hello。
8 位十六进制是什么算法?
最可能是 CRC32。它的输出是 32 位、十六进制表示后 8 个字符,但它属于校验和而不是密码学哈希:不加盐、不抗碰撞、任何人都能构造碰撞,只用于快速发现传输错误。看到 8 位十六进制,应先按校验和处理。
64 位十六进制为什么既可能是 SHA-256 又可能是 SHA3-256?
因为两者输出都是 256 位,十六进制后都是 64 个字符,且都使用十六进制字符集,仅凭字符串无法区分。区别只在内部结构:SHA-256 属 SHA-2 家族,SHA3-256 基于 Keccak 海绵结构,本页因此把两者并列列出。
输入里带了空格或换行会怎样?
页面会先去掉首尾的空格与换行再做判定。哈希在复制粘贴时很容易连带一个尾随空格,若不 trim 就会把长度多算一位、落到错误的候选。若字符中间出现空格,则会被视为非纯十六进制并给出相应提示。
这个工具免费吗?
免费,无需注册即可使用。
输入的数据安全吗?
安全。计算在当前浏览器本地完成,不会上传输入内容。
相关工具
- MD5 加密工具:生成 32 位十六进制摘要,与本页的长度 32 候选对应。
- SHA256 加密工具:生成 64 位十六进制摘要,与本页的长度 64 候选对应。
- Base64 编码工具:把数据编成 Base64 文本,常被误认成哈希。
- URL 编码工具:百分号编码,另一类容易被当成乱码的编码形式。
- 文本转二进制工具:把文字换成 0 与 1,便于理解定长输出的由来。
- 编码解码:查看全部编码解码工具。