跳到正文
OpsKit

Base64 编码 / 解码

把文本转成 Base64 再转回来。正确处理中文等非 ASCII 字符,支持 JWT 使用的 URL 安全字符集;当内容是二进制而非文本时会明确告诉你,而不是悄悄弄乱。

输出

全部在浏览器内完成. 这个页面是静态文件。你输入的内容只留在标签页里,不会发送到服务器,关闭即消失。所以粘贴真实的令牌或配置是安全的。

什么时候用得上

  • 查看 Kubernetes Secret 时,kubectl get secret 显示的每个值都是 Base64。
  • 把小图片或证书嵌入配置文件、环境变量或 data URI 时。
  • 检查以 Base64 传来的 Authorization 头、Webhook 负载或 JWT 片段时。

实际示例

普通 ASCII

输入
hello world
结果
aGVsbG8gd29ybGQ=

结尾的 = 是填充,不属于数据本身。

中文文本

输入
你好世界
结果
5L2g5aW95LiW55WM

一个汉字占 UTF-8 的 3 个字节。直接用 btoa() 的工具在这里会抛异常。

JWT 头部使用的 URL 安全形式

输入
{"alg":"HS256","typ":"JWT"}
结果
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

没有填充,也没有 + 和 /,放进 URL 里不会被破坏。

容易出错的地方

把 Base64 当成加密

它只是一种任何人都能还原的编码。Kubernetes Secret 是被 Base64 编码,而不是被保护。在威胁模型里应当按明文对待。

把 URL 安全的值丢给标准解码器

JWT 片段使用 - 和 _ 且没有填充,严格的标准解码器会拒绝。需要先转换字符集并把长度补齐到 4 的倍数。

被结尾的换行改变了值

echo "secret" | base64 会把结尾的换行一起编码。需要值完全一致时请用 echo -nprintf

常见问题

为什么编码后变长了?

Base64 用 4 个字符表示 3 个字节,因此大约增加 33%,再加上填充。这是让二进制通过纯文本通道所要付出的代价。

可以粘贴生产环境的密钥吗?

这个页面是静态文件,转换在标签页内的 JavaScript 中完成,没有任何数据被发送。你可以在输入时打开浏览器网络面板自行确认。

在终端里怎么做?

编码用 printf '%s' 'text' | base64,解码用 base64 -d。macOS 上解码参数是 -D。需要 URL 安全形式时再加 | tr '+/' '-_' | tr -d '='

相关工具