base64 是什么
base64 按 RFC 4648 把任意二进制数据编码成只含 ASCII 的文本,也能反向解码。它解决的是文本通道里传输二进制的问题:邮件附件、JSON 中的密钥字段、Kubernetes Secret、HTTP Basic 认证头都是它的应用场景。
基本信息
| 适用平台 | Linux / Unix(coreutils);macOS 与 BSD 参数不同 |
|---|---|
| 命令语法 | base64 [选项] [文件];解码用 base64 -d |
| 常用选项 | -d 解码;-w0 不换行(GNU);-i 忽略非字母字符 |
| 体积变化 | 编码后约为原始数据的 1.33 倍 |
典型使用场景
- 传输二进制:把证书、密钥、小块镜像贴进工单或聊天工具
- 处理接口返回:解码 API 返回的 base64 字段,还原成二进制文件
- 嵌入配置:Kubernetes Secret 等字段要求 base64 文本形式
- 拼装认证头:HTTP Basic 认证即 base64(user:pass) 的形态
- 快速抽查:小文件转 base64 后比对,确认内容未被意外改动
常用示例
常用示例
base64 image.png > image.b64 # 编码到文件
base64 -d image.b64 > image.png # 解码还原
base64 -w0 key.bin # 输出单行,嵌入 JSON 前必做
echo 'SGVsbG8=' | base64 -d # 从标准输入解码
base64 -d <<< "$B64_VALUE" | sha256sum # 解码后再校验
base64 -w0 cert.pem | tr '+/' '-_' | tr -d '=' # 转 URL 安全变体格式要点
| 项目 | 说明 | 注意 |
|---|---|---|
| 字符集 | A-Z a-z 0-9 + / | URL 安全变体把 + 与 / 换成 - 与 _ |
| 填充 | 末尾用 = 补齐到 4 的倍数 | 部分实现允许省略填充 |
| 换行 | GNU 默认每 76 字符换行 | 单行场景必须加 -w0 |
| 体积 | 约为原始数据的 1.33 倍 | 大文件不适合走 base64 通道 |
GNU 实现在解码时会忽略输入中的换行,用 -w0 生成过的单行内容可以直接还原,不必手工去掉换行符。
严格实现(如部分语言的解码库)要求填充字符完整,遇到无填充的字符串先补上等号再解码,否则会直接报错。
base64 是编码不是加密,任何人都能解回原文,敏感数据必须先加密再编码。
GNU coreutils 用 -w 控制换行,BSD 与 macOS 的 base64 用 -b,且解码参数为 -D,跨平台脚本要先探测。
URL 安全变体把 + 与 / 替换为 - 与 _ 并可去掉填充,常见于 JWT、URL 参数与文件名。
内容比对:小体积二进制编码成文本后可以放进 diff 或评审工具,比直接对比二进制更直观。