Base64 编解码完整教程:原理、场景与常见问题
最后更新:2026年5月 · 阅读时间:10分钟
什么是 Base64?
Base64 是一种基于 64 个可打印字符来表示二进制数据的编码方式。它将任意二进制数据转换为由 A-Z、a-z、0-9、+、/ 共 64 个字符组成的 ASCII 字符串。
简单来说,Base64 的作用就是把"不可见"的二进制数据变成"可见"的文本字符,方便在文本环境中传输。
Base64 字符表
| 值 | 字符 | 值 | 字符 | 值 | 字符 | 值 | 字符 |
|---|---|---|---|---|---|---|---|
| 0-25 | A-Z | 26-51 | a-z | 52-61 | 0-9 | 62 | + |
| 63 | / | = 用于末尾填充 | |||||
为什么需要 Base64?
很多场景只支持文本传输,不支持原始二进制数据:
- 电子邮件:SMTP 协议最初只支持 7-bit ASCII,无法直接传输图片、附件等二进制数据
- URL 参数:某些二进制数据需要通过 URL 传递
- JSON/Web:在 JSON 中嵌入图片数据(Data URL)
- 配置文件:在 YAML/XML 等文本配置中存储证书、密钥等二进制数据
Base64 将二进制数据编码为纯文本,解决了这些兼容性问题。
Base64 编码原理
编码步骤
- 将原始数据按 3 字节(24 位)一组分割
- 将每组 24 位分成 4 个 6 位组
- 每个 6 位值(0-63)查表对应一个 Base64 字符
- 如果原始数据不是 3 的倍数,用
=填充
编码示例
以字符串 "Man" 为例:
原始数据: M a n ASCII: 77 97 110 二进制: 01001101 01100001 01101110 6位分组: 010011 010110 000101 101110 查表: T W F u Base64: TWFu
注意:Base64 编码后的数据比原始数据大约大 33%(每 3 字节变成 4 字节),所以它不适合用于压缩数据。
变体
- 标准 Base64:
+/字符,用于 MIME、PEM 证书 - URL-safe Base64:
-_替换+/,用于 URL 和文件名 - Base64URL:JWT 中使用的变体,去掉
=填充
常见使用场景
1. Data URL(内嵌图片)
<img src="data:image/png;base64,iVBORw0KGgo..." alt="内嵌图片">
小图标可以直接内嵌在 HTML/CSS 中,减少 HTTP 请求数。
2. JWT Token
JWT 的 Header 和 Payload 都使用 Base64URL 编码:
Header: eyJhbGciOiJIUzI1NiJ9 Payload: eyJzdWIiOiIxMjM0NTY3ODkwIn0 Signature: SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
3. 邮件附件(MIME)
电子邮件中的图片、PDF 等附件使用 Base64 编码传输。
4. API 认证
// HTTP Basic Auth Authorization: Basic base64(username:password)
常见问题
Base64 是加密吗?
不是。Base64 是编码,不是加密。任何人都可以解码 Base64 数据。请勿将 Base64 用于保护敏感数据,应使用 AES、RSA 等真正的加密算法。
Base64 编码会增大多少体积?
编码后数据约为原始数据的 133%。具体来说,每 3 字节变成 4 字节,加上可能的 1-2 个 = 填充符。
为什么我的 Base64 解码失败?
- 数据中包含换行符或空格:先清理再解码
- 长度不是 4 的倍数:缺少填充符
= - 包含非法字符:确认是标准 Base64 还是 URL-safe 变体
- 数据被截断:确认完整性
提示:使用我们的在线 Base64 编解码工具可以快速验证和调试编码问题。
Base64 和 Hex 编码的区别?
| 特性 | Base64 | Hex |
|---|---|---|
| 编码效率 | ~133% | ~200% |
| 字符集 | 64 个 | 16 个 |
| 可读性 | 较低 | 较高 |
| 适用场景 | 邮件、JWT、Data URL | 哈希值、调试、颜色值 |