RFC 4648 - Base16、Base32和Base64数据编码
发布日期: 2006年10月
状态: 标准跟踪协议 (Standards Track)
作者: S. Josefsson (SJD)
废弃: RFC 3548
摘要 (Abstract)
本文档描述了常用的Base64、Base32和Base16编码方案。它还讨论了编码数据中换行符的使用、编码数据中填充的使用、编码数据中非字母字符的使用、不同编码字母表的使用以及规范编码。
本备忘录的状态 (Status of This Memo)
本文档为互联网社区规定了一个互联网标准跟踪协议,并请求讨论和改进建议。有关本协议的标准化状态和地位,请参阅当前版本的"互联网官方协议标准" (STD 1)。本备忘录的分发不受限制。
版权声明 (Copyright Notice)
Copyright (C) The Internet Society (2006).
目录 (Contents)
主要章节
- 1. Introduction (简介)
- 2. Conventions Used in This Document (本文档使用的约定)
- 3. Implementation Discrepancies (实现差异)
- 3.1 编码数据中的换行符
- 3.2 编码数据的填充
- 3.3 编码数据中非字母字符的解释
- 3.4 选择字母表
- 3.5 规范编码
- 4. Base 64 Encoding (Base64编码)
- 5. Base 64 Encoding with URL and Filename Safe Alphabet (URL和文件名安全的Base64编码)
- 6. Base 32 Encoding (Base32编码)
- 7. Base 32 Encoding with Extended Hex Alphabet (扩展十六进制字母表的Base32编码)
- 8. Base 16 Encoding (Base16编码)
- 9. Illustrations and Examples (图示和示例)
- 10. Test Vectors (测试向量)
- 11. ISO C99 Implementation of Base64 (Base64的ISO C99实现)
- 12. Security Considerations (安全考虑)
- 13. Changes Since RFC 3548 (自RFC 3548以来的变更)
- 14. Acknowledgements (致谢)
- 15. Copying Conditions (复制条件)
- 16. References (参考文献)
- 16.1 规范性参考文献
- 16.2 信息性参考文献
为什么Base编码很重要?
Base编码是互联网数据传输的基础。它将二进制数据转换为文本格式,使其能够在只支持文本的环境中传输和存储。
核心应用场景
| 编码方式 | 主要用途 | 典型应用 |
|---|---|---|
| Base64 | 通用二进制编码 | MIME邮件附件、JWT令牌、数据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参数
Base编码对照表
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
数据URI
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA..." />
MIME邮件附件
Content-Type: application/pdf
Content-Transfer-Encoding: base64
JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC9UeXBlIC9DYXRhbG9n...
相关资源 (Related Resources)
- 官方原文: RFC 4648 (TXT)
- 官方页面: RFC 4648 DataTracker
- 勘误表: RFC Editor Errata
相关RFC
- RFC 2045 - MIME Part One (定义Base64用于MIME)
- RFC 3548 - Base编码 (被RFC 4648废弃)
- RFC 7515 - JSON Web Signature (使用Base64URL)
- RFC 7519 - JSON Web Token (使用Base64URL)