Base64 是计算机领域最常见的编码之一——您在电子邮件、JWT、证书和 API 响应中随处可见它。本文解释 Base64 的工作原理、使用场景以及您会遇到的各种变体。
什么是 Base64?
Base64 是一种将二进制数据表示为仅使用 64 个可打印 ASCII 字符的二进制转文本编码方案。当您需要通过只处理文本的系统传输二进制数据时,就会用到它。
使用的 64 个字符:
A-Z(26 个字符)a-z(26 个字符)0-9(10 个字符)+和/(2 个字符)=用于填充
Base64 工作原理
Base64 将每 3 字节(24 位)二进制数据转换为 4 个字符(每个表示 6 位):
二进制: 01001101 01100001 01101110
分组: 010011 010110 000101 101110
十进制: 19 22 5 46
Base64: T W F u
填充
如果输入长度不是 3 的倍数,会添加 = 填充字符:
- 剩余 1 字节 → 2 个 Base64 字符 +
== - 剩余 2 字节 → 3 个 Base64 字符 +
=
大小开销
Base64 使数据大小增加约 33%(3 字节 → 4 字符)。
Base64 变体
标准 Base64(RFC 4648)
- 使用
+和/ - 用
=填充 - 用于:MIME 电子邮件、PEM 证书、大多数通用场景
URL 安全 Base64(Base64url)
- 使用
-和_替代+和/ - 填充可选(通常省略)
- 用于:JWT 令牌、URL、文件名、Web API
MIME Base64
- 标准 Base64,每 76 个字符换行
- 用于电子邮件附件
Base64 的常见用途
证书和密钥(PEM 格式)
每个 PEM 文件都是 Base64 编码的 DER:
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiI...
-----END CERTIFICATE-----
解码此内容可获得原始 DER 字节,然后用 ASN.1 解析器 解析。
JWT 令牌
JSON Web Token 对每个部分使用 Base64url 编码:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSJ9.signature
↑ 头部(Base64url) ↑ 载荷(Base64url) ↑ 签名
API 响应
许多 API 以 Base64 字符串返回二进制数据(图片、文件、密码学值)。
密码学值
配置文件和 API 中的密钥材料、IV、密文通常以 Base64 传输。
Base64 与其他编码对比
| 编码 | 字符集 | 大小开销 | 使用场景 |
|---|---|---|---|
| 十六进制 | 0-9, A-F | 100% | 密码学值、调试 |
| Base64 | 64 个字符 | 33% | 文本系统中的二进制数据 |
| Base64url | 64 个 URL 安全字符 | 33% | URL、JWT |
| Base94 | 94 个可打印字符 | ~22% | 最大密度文本编码 |
如需最大密度,Base94 使用所有 94 个可打印 ASCII 字符。参见 Base94 编码器。
密码学数据中的十六进制 vs Base64
在支付和 HSM 场景中,您会遇到两种格式:
| 格式 | 示例(AES 密钥) | 长度 |
|---|---|---|
| 十六进制 | 0123456789ABCDEF0123456789ABCDEF | 32 字符 |
| Base64 | ASNFZ4mrze8BI0VniavN7w== | 24 字符 |
- 十六进制在 HSM 工具和支付系统中更常见
- Base64在 Web/API 场景和证书中更常见
字符编码转换器 可在十六进制、Base64、ASCII、二进制和 EBCDIC 之间转换。
实践:解码 Base64
检查 JWT
对于 JWT eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSJ9.xxx:
- 用
.分割得到 3 部分 - Base64url 解码每部分(必要时添加填充)
- 头部和载荷是 JSON;签名是二进制
检查证书
- 删除
-----BEGIN CERTIFICATE-----和-----END CERTIFICATE----- - Base64 解码内容得到 DER 字节
- 用 ASN.1 解析器 或 SSL 证书解析器 解析
从 PEM 提取密钥
- 删除页眉/页脚行
- Base64 解码得到 DER
- 用 RSA DER 公钥解码器 解析
常见错误
| 错误 | 问题 | 修复方案 |
|---|---|---|
| 在 URL 中使用标准 Base64 | + 和 / 破坏 URL | 使用 Base64url |
| 忘记填充 | 解码失败 | 添加 = 填充使长度为 4 的倍数 |
| 将 Base64 与加密混淆 | Base64 不是加密 | 使用 AES 进行真正的加密 |
| 重复编码 | 数据损坏 | 只编码一次 |
重要:Base64 是编码,不是加密。任何人都可以解码它。永远不要用 Base64 来"隐藏"敏感数据。
在线工具
使用 Base64 编码器/解码器:
- 将文本或十六进制编码为 Base64
- 将 Base64 解码为文本或十六进制
- 处理标准和 URL 安全变体
- 自动处理填充
如需在多种格式(十六进制、Base64、ASCII、二进制、EBCDIC)之间转换,使用 字符编码转换器。