密码类型识别器

在 CTF 题目、日志文件或旧文档里发现一段可疑字符串,不知道是 Base64、hex、二进制、摩斯电码还是其他?粘贴文本,识别器会检查字符集和结构,给出最可能的编码和密码排名。在动用专门的解码器之前,这是一个不错的第一步。

识别器的工作原理

  1. 1

    粘贴密文

    任意长度。非常短的字符串(<20 字符)信号较弱;较长的文本能给出更稳的分类结果。

  2. 2

    字符集分析

    字母、数字和符号的分布可以缩小候选范围(全是 hex、全是 base64 字母表、全是大写拉丁字母等)。

  3. 3

    签名匹配

    长度规则(偶数位 hex、base64 每 4 个一组、哈希为 32/40/64 位 hex)、分隔符(JWT 的点、摩斯的点和横线)以及常见前缀(eyJ、$2b$)会与已知签名比对。

  4. 4

    给出排名候选

    所有匹配的候选按置信度排序并以百分比显示,方便你决定先试哪个解码器。

识别启发式

线索 可能的密码 / 编码
仅含 A-Z a-z 0-9 + / =,长度是 4 的倍数 Base64
仅含 0-9 a-f,长度为偶数 Hex
仅含 0-1,8 位或更多 二进制
只有点、横线、斜杠和空格 摩斯电码
仅大写拉丁字母,5 个以上 凯撒或替换密码
20 个以上拉丁字母,无空格 单表替换密码
大小写混合的拉丁字母 纯文本,很可能不是密码
三个点分隔的片段,以 eyJ 开头 JWT 令牌
$2a$$2b$$2y$ 开头 bcrypt 哈希
恰好 32 个 hex 字符 MD5 哈希
恰好 40 个 hex 字符 SHA-1 哈希
恰好 64 个 hex 字符 SHA-256 哈希

字符之外的判别线索

  • Base64:每 4 个字符一组,末尾有 = 填充,包含 +/
  • 凯撒或替换:仅大写拉丁字母,无数字。频率与纯文本相同,只是被移位了。
  • 摩斯电码:只有点、横线、斜杠和空格。
  • JWT:三个点分隔的片段,通常以 eyJ 开头。
  • 哈希(MD5/SHA):定长 hex(MD5 为 32 位,SHA-1 为 40 位,SHA-256 为 64 位)。不可逆,识别器会标注,免得你去尝试“解码“。
  • 二进制:一长串 0 和 1,常以 8 位为一组。

自动识别的局限

  • 短输入(<10 字符):置信度普遍偏低,什么都可能。
  • 使用一次性密码本(OTP)的自定义 XOR:不掌握密钥时与随机数据无法区分。识别器不会返回任何匹配。
  • 多层组合:CTF 常见套路是 Base64 → 反转 → Caesar → hex。一层一层剥。
  • 非英文源语言:拉丁字母检查仍然适用,但“纯文本“只是猜测;识别器不做语言检测。

置信度评分

每个候选都有一个固定的置信度,取决于其签名的特异性。80% 以上:可能性较大。50-80%:有可能。50% 以下:不太可能。多个匹配通常意味着输入太短或是混合密码。

常见问题

每种密码识别都依赖统计规律,统计需要足够的数据才可靠。少于 20 字符时,很多密码看起来一模一样;50 字符以上才能得到稳定信号。

它只会给出最可能的方案。解码由专门的解码工具完成,部分方案需要你提供密钥。

先看字符集(出现了哪些字母/符号),再看长度和结构。如果仍不明朗,逐个尝试常见的嫌疑解码器(Base64、hex、Caesar),在 CTF 里,频率分析加猜测通常几下就能破。

一般认不出具体名字:要么没有候选,要么给出低置信度的猜测。将密文的字母表与结构对照上方的启发式表格,足以逆向出简单的自制方案。

相关工具