如何解码 JSON 中的 Base64 字段
- 把 JSON 粘贴到 输入 · JSON,或拖入
.json或.har文件。 - 表格列出每个匹配项的 路径、看起来像、置信度和 解码结果 预览,并提供 复制解码结果 和 下载。
- 输出窗格中是整个文档,其中的文本、JSON 和 JWT 值已被原地解码,方便阅读或比对差异。
- 调整 最小长度(默认 8)可以跳过短字符串;取消勾选 解析嵌套 JSON 只处理第一层;寻找短的二进制密钥时,勾选 显示低置信度匹配。
JSON 转 Base64 标签页的作用正好相反:它校验 JSON,并按原样、压缩或格式化的形式编码,可选 URL 安全、不填充和换行。
示例:含三个编码字段的 API 响应
{
"event": { "body": "eyJvcmRlcklkIjo0MiwicXR5IjoyfQ==", "isBase64Encoded": true },
"file": { "name": "README.md", "encoding": "base64",
"content": "IyBEZW1vCgpIZWxsbyBmcm9tIHRoZSBSRUFETUUuCg==" },
"prefs": "eyJ0aGVtZSI6ImRhcmsifQ==",
"sha": "3b18e512dba79e4c8300dd08aeb37f8e728b8dad"
}
| 路径 | 看起来像 | 解码结果 |
|---|---|---|
$.event.body | JSON | {"orderId":42,"qty":2} |
$.file.content | 文本 | # Demo / Hello from the README. |
$.prefs | JSON | {"theme":"dark"} |
$.sha 没有被列出。单看字母表,40 个字符的 hex 字符串是有效的 Base64,但它是一个 Git 哈希,扫描器会有意排除较长的 hex 字符串。表中每个 eyJ 前缀都是 {" 的 Base64,一眼就能看出是编码过的 JSON。
Base64 藏在 JSON 的哪些地方
- AWS API Gateway 和 Lambda 事件把二进制或压缩过的请求体放在
body中,并带有"isBase64Encoded": true。 - GitHub 的 contents API 以
content返回文件,带"encoding": "base64",并用\n分行。这里会忽略换行。 - Gmail API 的邮件部分在
body.data中使用 URL 安全的 Base64。URL 安全的输入(-和_)会被自动识别。 access_token或id_token字段中的 JWT 会解码头部和载荷。要校验签名,请使用 JWT 解码器。avatar或logo字段中data:image/png;base64,…之类的 data URI 会连同 MIME 类型一起被识别。- JSON 形式的 Kubernetes Secret;Kubernetes Secret 解码器 提供了针对 Secret 的额外功能。
用 Python 实现
一个最简单的遍历器,报告能解码为 UTF-8 文本的字符串:
import base64, binascii, json, sys
def walk(node, path="$"):
if isinstance(node, dict):
for k, v in node.items():
yield from walk(v, f"{path}.{k}")
elif isinstance(node, list):
for i, v in enumerate(node):
yield from walk(v, f"{path}[{i}]")
elif isinstance(node, str) and len(node) >= 8:
try:
text = base64.b64decode(node, validate=True).decode("utf-8")
yield path, text
except (binascii.Error, UnicodeDecodeError):
pass
for path, text in walk(json.load(open(sys.argv[1]))):
print(path, "=>", text[:60])
它会漏掉 URL 安全和不带填充的值,以及图片等二进制载荷,而真正的扫描器大部分工作量恰恰在这里。解码细节见 Python 中的 Base64,字母表的差异见 Base64 与 Base64URL 的区别。
局限
- 识别基于启发式规则。少于 8 个字符的值和看似随机的二进制密钥可能被漏掉或标记为不确定;降低 最小长度 并开启低置信度匹配即可看到它们。
- 扫描在处理 200,000 个字符串后停止,最多显示 1,000 行,足以应对大型 HAR 文件而不会卡住标签页。
- 无效的 JSON 会报告出错的行和列。如果只是单个解码后为 JSON 的 Base64 字符串,请使用 Base64 转 JSON。
常见问题
工具怎样区分 Base64 和普通字符串?
它会解码每个候选值并检查结果:可读的 UTF-8、有效的 JSON 或已知的文件签名都算高置信度。十六进制哈希、纯数字字符串和普通单词会被排除;二进制结果则根据长度和填充标记为“较可能”或“不确定”。
可以解码 HAR 文件中的 Base64 字段吗?
可以。拖入从浏览器“网络”面板导出的 .har 文件。以 "encoding": "base64" 存储的响应体会连同解码内容出现在表格中,请求和响应 JSON 中的其他 Base64 也一样。
图片之类的二进制值会怎样处理?
它们会连同识别出的文件类型和一个“下载”按钮一起列出,在输出窗格中仍保持为 Base64。只有文本、JSON 和 JWT 值会被原地替换。