上传文件
  1. base64hub
  2. Web 与令牌工具
  3. JSON 中的 Base64

查找并解码 JSON 中的 Base64

粘贴任意 JSON,扫描器会遍历每个字符串,挑出真正是 Base64 的那些,并把每个解码结果显示在它的路径旁边,例如 $.event.body。

免费 无需注册,不限次数 本地 不上传任何内容 嵌套 解码出的 JSON 会被再次扫描,最多 6 层 更新于 2026年10月27日
输入 –输出 –

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何解码 JSON 中的 Base64 字段

  1. 把 JSON 粘贴到 输入 · JSON,或拖入 .json 或 .har 文件。
  2. 表格列出每个匹配项的 路径、看起来像、置信度和 解码结果 预览,并提供 复制解码结果 和 下载。
  3. 输出窗格中是整个文档,其中的文本、JSON 和 JWT 值已被原地解码,方便阅读或比对差异。
  4. 调整 最小长度(默认 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.bodyJSON{"orderId":42,"qty":2}
$.file.content文本# Demo / Hello from the README.
$.prefsJSON{"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 值会被原地替换。