哈希算法识别工具(逆向判定)|自动判断 MD5・SHA-1・SHA-256・SHA-512・SHA-3・BCrypt・Argon2
只需粘贴一段疑似哈希值的字符串,本工具即可根据字符数、字符种类和前缀,判断它最可能是由 MD5、SHA-1、SHA-256、SHA-512、SHA-3、BCrypt、Argon2 中的哪种算法生成的。判定过程完全在浏览器内完成。
哈希值本身并不会记录生成时所用的算法名称。由于多种算法可能产生相同的输出长度,此判定结果只是基于字符数、字符种类和前缀得出的"最可能的推测",并非100%确定的结论。
哈希判定小提示
- 判定仅以字符数、字符种类(十六进制还是 Base64)和前缀为线索,并不会实际重新计算哈希值进行验证。它只是展示"从格式上可以推测出的候选项"。
- BCrypt(
$2a$/$2b$/$2y$)和 Argon2($argon2id$等)的前缀本身就嵌入了算法名称和参数,因此可以以较高的置信度判定。 - 64位十六进制最常见的是 SHA-256,但 SHA3-256 也是相同的位数,如果知道来源系统所用的语言或库,也请一并参考该信息。
- 多行复制的哈希转储(以换行符或空格分隔)也会在判定前自动去除内部的空白字符,因此可以直接粘贴使用。
- 如果对判定结果没有把握,最可靠的方法是查看生成该哈希值的应用程序源代码或文档。
常见问题
$2b$ 或 $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 中选择哪种攻击模式)。