哈希算法识别工具(逆向判定)|自动判断 MD5・SHA-1・SHA-256・SHA-512・SHA-3・BCrypt・Argon2

只需粘贴一段疑似哈希值的字符串,本工具即可根据字符数、字符种类和前缀,判断它最可能是由 MD5、SHA-1、SHA-256、SHA-512、SHA-3、BCrypt、Argon2 中的哪种算法生成的。判定过程完全在浏览器内完成。

哈希值本身并不会记录生成时所用的算法名称。由于多种算法可能产生相同的输出长度,此判定结果只是基于字符数、字符种类和前缀得出的"最可能的推测",并非100%确定的结论。

由哈希值推断所用算法

**哈希值本身并不记录生成它的算法名称。** 但仍可加以推断,线索有三:**输出的字符数**(MD5为32、SHA-1为40、SHA-256为64、SHA-512为128)、**字符种类**(十六进制还是 Base64),以及 **`$2b$`、`$argon2id$` 之类的前缀**。本工具便依这三点判定最可能的算法。

**不过这是推断而非定论。** 因为多种算法共用同一输出长度——64个十六进制字符既可能是 SHA-256,也可能是 SHA3-256 或 BLAKE2s。另一方面,像 bcrypt 与 Argon2 这样**带有参数的字符串格式**,则可凭前缀确凿分辨。判定全在浏览器内完成,所贴上的字符串不会被送出。

判定的步骤

  1. 贴上哈希字符串 前后的空白会被忽略。
  2. 阅读判定结果 候选算法会按可能性由高到低列出。
  3. 确认字符数与字符种类 会一并显示依据,让您看清**为何得出该候选**。
  4. 查看有无前缀 若为 `$` 开头的格式,答案基本可收敛为一个。

用好本工具的小技巧

  • 判定仅以字符数、字符种类(十六进制还是 Base64)和前缀为线索,并不会实际重新计算哈希值进行验证。它只是展示"从格式上可以推测出的候选项"。
  • BCrypt($2a$/$2b$/$2y$)和 Argon2($argon2id$ 等)的前缀本身就嵌入了算法名称和参数,因此可以以较高的置信度判定。
  • 64位十六进制最常见的是 SHA-256,但 SHA3-256 也是相同的位数,如果知道来源系统所用的语言或库,也请一并参考该信息。
  • 多行复制的哈希转储(以换行符或空格分隔)也会在判定前自动去除内部的空白字符,因此可以直接粘贴使用。
  • 如果对判定结果没有把握,最可靠的方法是查看生成该哈希值的应用程序源代码或文档。

这些场景会用到

调查接手的系统

可先为数据库中留存的哈希究竟以何种方式生成找出方向。

判断能否迁移

**若为 bcrypt 或 Argon2,可连同参数保留并逐步迁移。**

发现安全上的问题

**若发现以 MD5 或 SHA-1 保存密码,这本身就是待纠正之处。**

读懂日志或转储

面对来历不明的长串十六进制时,可作为查究的线索。

哈希的术语

MD5
128位的哈希函数。**碰撞已可实际构造,因此不得用于密码,也不得用于篡改检测。**
SHA-1
160位的哈希函数。与 MD5 同样已被证实存在碰撞攻击,不建议使用。
SHA-256/SHA-512
SHA-2 系列的函数。**其速度快在别处是优点,用于保存密码时反成弱点。**
bcrypt
专为密码设计的哈希,字符串中带有成本系数,以 `$2a$`、`$2b$` 开头。
Argon2
2015年竞赛的优胜密码哈希,以 `$argon2id$` 开头,还可调整内存用量。
盐
每次哈希都变换的随机值。**bcrypt 与 Argon2 会把它嵌进字符串之中。**

常见问题

仅凭哈希值本身是不可能做到的。由于存在像 SHA-256 和 SHA3-256 这样输出位数完全相同的算法,仅看输出结果无法下定论。若要确切知道,需要查看生成该哈希值的应用程序的源代码或文档。

这是因为 BCrypt 和 Argon2 是专为密码存储而设计的,它们采用了一种"模块化加密格式",会在哈希值开头以文本形式嵌入 $2b$ 或 $argon2id$ 之类的算法名称和参数。只要能读取到这些信息,就能唯一确定所使用的算法。

不能。本工具仅根据哈希值的"外观"推测算法种类,完全不提供从哈希值还原原始数据(例如暴力破解)的功能。

MD5 和 SHA-1 的抗碰撞性已被攻破,如果在密码存储场景中发现它们,应将其视为安全风险处理。建议将系统迁移到专为密码存储设计的 BCrypt 或 Argon2id。

可以。使用本站的哈希批量计算与比较工具,输入相同的字符串即可实际计算出 MD5、SHA-1、SHA-256、SHA-512、SHA-3、BCrypt、Argon2id 的值,并与此判定结果进行核对。
工具君

闲话 ― 为什么仅凭哈希值无法确定所使用的算法

哈希函数的职责是"将输入数据转换为固定长度的输出",而这个输出(摘要)本身并不包含任何指明算法名称的元数据。这是设计上的必然结果:如果嵌入元数据,输出长度就会发生变化,从而破坏"固定长度"这一密码学哈希函数的重要性质。因此,我们能够依据的线索只有输出的"外观"——即字符数和字符种类。

这一局限性在 SHA-2 系列与 SHA-3 系列的关系上表现得最为明显。SHA-256 与 SHA3-256 的内部结构完全不同(SHA-2 采用 Merkle–Damgård 结构,SHA-3 采用海绵结构),但两者都被设计成输出 256 位、即十六进制 64 位的结果。SHA-224 与 SHA3-224、SHA-384 与 SHA3-384、SHA-512 与 SHA3-512 之间也存在同样的关系,仅凭输出长度无法断定究竟是哪一个。由于在实际应用中 SHA-2 系列的普及率远高于 SHA-3 系列,本工具在位数一致时会优先给出 SHA-2 系列作为候选,但这终究只是基于统计趋势的推测。

另一方面,BCrypt 和 Argon2 这类专为密码哈希设计的算法,为了消除这种不确定性,采用了一种被称为"模块化加密格式"的自描述格式。例如 $2b$12$... 或 $argon2id$v=19$...,会将算法名称、版本和参数以文本形式嵌入到开头,使得仅凭哈希值本身就能唯一还原出计算方式。遇到这种格式的哈希值时,就可以进行确定性的判定。

这类判定工作在实际场景中确有用武之地,例如调查从遗留系统中发掘出的密码转储数据,或是在被称为 CTF(夺旗赛)的安全竞赛中进行密码破译挑战。只要能从哈希值缩小算法范围,就能高效地决定接下来应尝试哪种分析工具或破解手法(例如在 Hashcat 中选择哪种攻击模式)。