RFC 4648 - Base16、Base32 与 Base64 数据编码
- 状态:建议标准(Proposed Standard)
- 发布日期:2006 年 10 月
- 流:IETF
- 废止:RFC 3548
- 勘误:无勘误
摘要
本文档描述了常用的 Base64、Base32 与 Base16 编码方案,同时讨论了编码数据中换行符的使用、填充字符的使用、非字母表字符的使用、不同编码字母表的使用,以及规范编码。
本备忘录的状态
本文档为互联网社区规定了互联网标准跟踪协议,并请求对其讨论与改进建议。有关该协议的标准化状态与状况,请参考《互联网官方协议标准》(STD 1)的当前版本。本备忘录的分发不受限制。
版权声明
版权所有 (C) 互联网协会(2006)。
目录
主要章节
- 1. 引言
- 2. 本文档使用的约定
- 3. 实现差异
- 3.1 编码数据中的换行符
- 3.2 编码数据的填充
- 3.3 编码数据中非字母表字符的解释
- 3.4 选择字母表
- 3.5 规范编码
- 4. Base 64 编码
- 5. 使用 URL 与文件名安全字母表的 Base 64 编码
- 6. Base 32 编码
- 7. 使用扩展十六进制字母表的 Base 32 编码
- 8. Base 16 编码
- 9. 图示与示例
- 10. 测试向量
- 11. Base64 的 ISO C99 实现
- 12. 安全注意事项
- 13. 相对 RFC 3548 的变化
- 14. 致谢
- 15. 复制条件
- 16. 参考文献
- 16.1 规范性参考文献
- 16.2 资料性参考文献
为什么基数编码很重要
基数编码是互联网数据传输的基础。它将二进制数据转换为文本格式,使其能够在仅支持文本的环境中进行传输与存储。
核心用例
| 编码 | 主要用途 | 典型应用 |
|---|---|---|
| Base64 | 通用二进制编码 | MIME 电子邮件附件、JWT 令牌、Data URI |
| Base64URL | URL 安全编码 | JWT、OAuth 令牌、URL 参数 |
| Base32 | 人类可读编码 | TOTP 密钥、Crockford 编码 |
| Base16 | 十六进制编码 | 哈希显示、调试输出 |
Base64 快速参考
标准 Base64 编码
字符集:A-Z、a-z、0-9、+、/
填充字符:=
输出长度:输入字节数 × 4/3(向上取整到 4 的倍数)
示例:
输入:"Hello"
输出:"SGVsbG8="
编码过程:
H e l l o
01001000 01100101 01101100 01101100 01101111
↓ 按 6 位分组
010010 000110 010101 101100 011011 000110 1111
↓ 查表
S G V s b G 8=
Base64URL 编码(RFC 4648 §5)
字符集:A-Z、a-z、0-9、-、_
填充字符:=(通常省略)
与标准 Base64 的差异:
+ → -
/ → _
用途:JWT、OAuth 令牌、URL 参数
基数编码参考表
Base64 标准字符表
值 字符 值 字符 值 字符 值 字符
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /
填充字符:=
Base32 标准字符表
值 字符 值 字符
0 A 16 Q
1 B 17 R
2 C 18 S
3 D 19 T
4 E 20 U
5 F 21 V
6 G 22 W
7 H 23 X
8 I 24 Y
9 J 25 Z
10 K 26 2
11 L 27 3
12 M 28 4
13 N 29 5
14 O 30 6
15 P 31 7
填充字符:=
真实世界应用
JWT(JSON Web Token)
JWT 结构:
header.payload.signature
每一部分均为 Base64URL 编码:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Data URI
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA..." />
MIME 电子邮件附件
Content-Type: application/pdf
Content-Transfer-Encoding: base64
JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC9UeXBlIC9DYXRhbG9n...
相关资源
- 官方来源:RFC 4648 (TXT)
- 官方页面:RFC 4648 DataTracker
- 勘误:RFC Editor Errata
相关 RFC
- RFC 2045 - MIME 第一部分(为 MIME 定义 Base64)
- RFC 3548 - 基数编码(已被 RFC 4648 废止)
- RFC 7515 - JSON Web 签名(使用 Base64URL)
- RFC 7519 - JSON Web Token(使用 Base64URL)