我需要哪个 Web 工具
| 你手头的东西 | 样子 | 工具 |
|---|---|---|
| JSON Web Token | eyJhbGci….eyJzdWIi….sig | JWT 解码器、JWT 编码器 |
| Authorization 请求头 | Basic dXNlcjpwYXNz | Basic Auth 解码器、Basic Auth 请求头 |
带 - 和 _、没有 = 的 Base64 | SGVsbG8_d29ybGQ | Base64URL 解码器、Base64URL 编码器 |
| 在两种字母表之间转换 | Base64 转 Base64URL、Base64URL 转 Base64 | |
| data URI | data:image/png;base64,… | Data URI 解析器、Data URI 生成器 |
| SAML 消息 | SAMLResponse=PHNhbWxwOl… | SAML 解码器 |
| Kubernetes Secret | YAML 中的 data: 值 | Kubernetes Secret 解码器 |
| 镜像拉取密钥 | eyJhdXRocyI6… | .dockerconfigjson 解码器 |
| 压缩后的 Base64 | H4sI… 或 eJ… | Gzip Base64 解码器;生成:gzip、zlib |
| 含编码字段的 JSON 文档 | "body": "eyJ…" | JSON 中的 Base64 |
| 编码后的 PowerShell 命令 | powershell -enc JABzAD0A… | PowerShell -EncodedCommand |
| 原始邮件源码 | Content-Transfer-Encoding: base64 | 邮件解码器、Quoted-printable |
| URL 编码的文本 | q=caf%C3%A9%20menu | URL 解码、URL 编码 |
| HTML 转义的文本 | <p>Café</p> | HTML 实体 |
层层嵌套
Web 载荷常常被包装好几层,每一层都需要对应的工具。几种常见的嵌套:
- 镜像拉取密钥:Kubernetes 的 Base64 包着 Docker JSON,里面又是 Base64 编码的
user:password。.dockerconfigjson 解码器会把三层全部解开。 - SAML Redirect:XML、原始 deflate、Base64、URL 编码。SAML 解码器会把整条链反向还原。
- Helm release:JSON、gzip、Base64,外面再套一层 Kubernetes 的 Base64。
- 跳转 URL:查询参数中的 URL 编码 URL,有时被编码了两次。URL 解码器的 多次解码 选项可以处理。
- Flask 会话 Cookie:JSON,可选 zlib 压缩(以开头的
.标记),Base64URL,然后是时间戳和签名,用点号连接。
如果解码后的结果看起来仍是编码过的,把它的开头几个字符与上表对照,再用对应的工具继续解码。
编码不等于保护
这些格式都不能隐藏任何东西。JWT 载荷、Basic Auth 请求头、Kubernetes Secret 和 SAML 断言,任何看到它们的人都能读取;只有签名或真正的加密才能增加安全性。这里的解码器之所以有用,恰恰是因为这一点;也正因为如此,这类字符串最好不要出现在日志、截图和工单中。更多内容见 编码与加密。
证书、SSH 密钥和哈希请看 密钥与证书。普通字符串和字符集请看 文本工具。
常见问题
怎样判断手头的编码字符串是哪一种?
看它的形状:以 eyJ 开头、由点号分成三段的是 JWT;% 加两位十六进制数字的是 URL 编码;& 是 HTML 转义;H4sI 是 gzip;Base64 中出现 - 或 _ 则是 Base64URL。本页的表格列出了更多模式及其对应的工具。
用这些工具处理生产环境的令牌和密钥安全吗?
它们在你的浏览器中运行,页面的内容安全策略会拦截除 Cloudflare 的浏览量统计以外的所有网络请求,所以粘贴的数据无法被发送到任何地方。尽管如此,对线上令牌仍要谨慎,任何在别处泄露过的密钥都应该轮换。
URL 编码和 Base64URL 有什么区别?
URL 编码把单个字符转义为 %XX,其余部分保持可读。Base64URL 把任意字节变成字母、数字、- 和 _。文本值用 URL 编码,二进制数据和令牌用 Base64URL。