首页/系统/Linux 运维命令速查/base64 编码与解码
文本处理77 条

base64 编码与解码

按 RFC 4648 把二进制转成 ASCII 文本:传输二进制、嵌入数据到文本协议、解码 API 返回的编码字段。

Linux 运维命令速查系统更新于 2026-10-13

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 或评审工具,比直接对比二进制更直观。

易错点

  • 默认每 76 字符换行,贴进 HTTP 头或 JSON 单行字段时换行符会破坏内容,不加 -w0 就会踩坑
  • 编码后体积增大约三分之一,把大文件塞进 base64 通道会显著放大传输与存储成本
  • GNU 与 BSD 的参数名不同(-w 与 -b、-d 与 -D),跨平台脚本直接套用会失败
  • 把 base64 当加密使用会让敏感数据明文暴露,它只提供编码与传输便利

数据来源与参考

  • RFC 4648(Base16/32/64 数据编码)
  • man 1 base64(GNU coreutils 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌