命令与包管理65 条

base64 编解码

处理二进制转文本的场景:证书、图片随配置传递,或排查接口参数编码问题;只是编码不是加密,不可用于保密。

信创系统运维速查系统更新于 2026-10-13

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 Secretkubectl get secret -o jsonpath | base64 -d确认取的是 data 而非 stringData
标准 base64 的字符集包含 + 与 /,放进 URL 或文件名容易出问题;URL-safe 变体把这两个字符换成 - 与 _,工具链之间不通用,遇到解码报 invalid input 时先确认拿到的是哪一种。
base64 是公开编码不是加密:把口令、私钥编码后写进脚本或配置,等同于明文保存;敏感凭据应交给密钥管理或至少做文件权限与加密保护。

易错点

  • 默认编码结果每 76 字符折行,做 JSON 或单行配置值时不加 -w0 会导致解析失败
  • 编码字符串时漏掉 echo 的 -n,解码结果会多出一个换行,认证与比对场景会直接失败
  • 把 base64 当保密手段:任何拿到密文的人都能解码,敏感数据必须另做加密与权限控制
  • 中文等多字节内容编码前先确认源文件编码,乱码多半是源头编码不对而非编解码过程出错

数据来源与参考

  • GNU coreutils base64 手册
  • RFC 4648
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌