编码格式识别

不确定一段字符串是 Base64、十六进制、Base58 还是别的编码?粘贴到这里,工具会尝试所有解码器,对能顺利解码的结果排序,并预览解码后的数据。

完全在浏览器中运行,不会上传任何数据。

使用方法

  1. 把未知字符串粘贴到输入框中。
  2. 工具会运行所有解码器,列出能顺利解码的编码,可能性最高的排在最前面。
  3. 查看每个候选结果的解码预览(文本或字节)以及识别出的文件类型。
  4. 确定编码后,打开对应的工具页面进行解码、转换或下载。

识别原理

每种编码都有自己的规则,字符串要么符合,要么不符合。工具会用每个解码器尝试解码你的输入:遇到字母表之外的字符、不可能出现的长度或位置错误的填充,就排除该编码;剩下的再按解码结果的合理程度排序。

  • 字符集。十六进制只用 0-9 和 a-f;Base58 不会出现 0、O、I、l;出现 + 或 / 多半是 Base64,出现 - 和 _ 则更像 Base64URL。
  • 长度和填充。十六进制必须是偶数位;Base64 以 4 个字符为一组,Base32 以 8 个字符为一组,填充符 = 只能出现在末尾。
  • 解码结果是否可读。能解码成有效 UTF-8、并且由可打印字符组成的候选,远比解出一堆随机字节的候选更可信。
  • 文件签名。如果解码后的字节以已知的文件头开头,例如 PNG、JPEG、PDF、ZIP 或 gzip,工具会同时显示文件类型。

data: URI 前缀、Adobe 的 <~ ~> 定界符、uuencode 的 begin 行等包装格式,对应的解码器都能识别。整个过程都在浏览器中完成。

为什么结果是排序,而不是定论

不同编码的字母表大量重叠。字符串 48656c6c6f 是 Hello 的十六进制形式,但这 10 个字符同样是合法的 Base64、Base36、Base58 和 Base62,只是解出的字节各不相同。只有按十六进制解读才能得到可读文本,所以十六进制排在第一位。像 cafe 这样的短单词几乎符合所有字母表,字符串本身无法说明它原本用的是哪一种。

输入越长,结论越清晰,因为偶然吻合的可能性会迅速降低。如果没有任何候选能解码成文本或已知文件类型,数据可能经过加密或压缩,也可能是哈希值。例如十六进制形式的 SHA-256 哈希完全是合法的十六进制,但它的字节本来就设计成看似随机。

常见编码的肉眼识别方法

编码典型特征
十六进制只有 0-9 a-f,长度为偶数。32、40 或 64 位常见于 MD5、SHA-1、SHA-256 哈希。
Base64A-Z a-z 0-9 + /,长度是 4 的倍数,末尾可能有 = 或 ==。
Base64URL用 - 和 _ 代替 + 和 /,通常不填充。用点号连接的三段内容是 JWT。
Base32大写 A-Z 加 2-7,用 = 填充到 8 的倍数。
Base58字母和数字,但没有 0 O I l。常见于比特币地址和以 Qm 开头的 IPFS 哈希。
Ascii85、Base85字母、数字和标点符号密集混排。Ascii85 有时包在 <~ ~> 之间。

常见问题

怎样判断一段字符串是不是 Base64?
看它是否只包含 A-Z、a-z、0-9、+ 和 /,长度是否为 4 的倍数,末尾是否最多有两个等号。粘贴到这里,看看能否解码成可读文本或已知文件类型。如果需要严格检查并定位错误位置,请使用 Base64 校验工具。
为什么会显示好几种编码?

很多字符串同时符合多个字母表,短字符串尤其如此。工具会列出所有能无错误解码的编码,并根据解码结果是否为可读文本、是否带有文件签名,把最可能的排在前面。

所有结果都不是可读文本,说明什么?
数据可能是二进制内容,比如图片或压缩文件,这时可以参考识别出的文件类型。它也可能是加密数据、哈希值,或者用非标准字母表编码的字节;后一种情况可以试试自定义字母表工具。
这个工具能解密字符串或破解哈希吗?

不能。Base64 这类编码不使用密钥,本身就是可逆的,所以能被识别和解码。加密数据没有密钥就无法读取,哈希值也无法还原成原始输入。

粘贴的字符串会发送到服务器吗?

不会。所有解码器都在浏览器本地运行,令牌、密钥和日志内容都不会离开你的设备。