base64 是做什么的
base64 把任意二进制数据按每 3 字节一组重新编码成 4 个可打印 ASCII 字符,编码后体积约增加三分之一。它只解决「二进制数据走文本通道」的问题,例如 JSON 字段、配置文件、邮件正文、Kubernetes Secret 的 data 字段,本身不带密钥、无法保密,任何人都能一键还原。coreutils 提供的 base64 命令在麒麟、UOS、openEuler 上均默认可用。
基本信息
| 适用平台 | Linux/macOS 通用;Windows 可用 certutil -encode 替代 |
|---|---|
| 编码 | base64 文件名,或 echo -n 字符串 | base64 |
| 解码 | base64 -d,读文件或标准输入 |
| 生成单行 | base64 -w0,去掉默认的换行折行 |
| 权限要求 | 普通用户,能读取源文件即可 |
典型使用场景
- 证书、图片、密钥等二进制内容要随配置文件或接口参数传递时,先编码成文本
- 核对 Kubernetes Secret:data 字段是 base64 编码,排查配置错误时需要手工解码确认明文
- 接口联调排查参数编码问题:看服务端收到的字符串是否与预期明文一致
- 邮件与 HTTP 场景理解 MIME 编码:Content-Transfer-Encoding 为 base64 时的实际内容
- 构造 Basic 认证头:把用户名冒号口令编码后放入 Authorization 字段做联调
- 通过聊天工具或工单系统传递小体积二进制片段,避免附件通道受限
典型用法
典型用法
base64 logo.png > logo.b64 # 编码成文本
base64 -d logo.b64 > logo-restored.png # 解码还原二进制
cmp logo.png logo-restored.png && echo same # 校验还原结果一致
echo -n 'admin:pass' | base64 # 加 -n 避免把换行也编进去
base64 -w0 cert.pem # 输出单行,便于塞进 JSON 或配置
base64 -d <<< $(grep -o '[A-Za-z0-9+/=]\{20,\}' payload.txt | head -1) # 从日志里抽取解码
base64 --version # 确认 coreutils 版本可用场景与命令对照
| 场景 | 命令写法 | 注意点 |
|---|---|---|
| 文件编码 | base64 -w0 file | 单行便于嵌入配置,长文本仍建议分片 |
| 字符串编码 | echo -n str | base64 | 漏掉 -n 会把换行一并编码 |
| 文件解码 | base64 -d file.b64 > out | 解码后核对大小与校验和 |
| 单行解码 | echo 'xxx' | base64 -d | 内容含换行时优先用重定向 |
| K8s Secret | kubectl get secret -o jsonpath | base64 -d | 确认取的是 data 而非 stringData |
标准 base64 的字符集包含 + 与 /,放进 URL 或文件名容易出问题;URL-safe 变体把这两个字符换成 - 与 _,工具链之间不通用,遇到解码报 invalid input 时先确认拿到的是哪一种。
base64 是公开编码不是加密:把口令、私钥编码后写进脚本或配置,等同于明文保存;敏感凭据应交给密钥管理或至少做文件权限与加密保护。