跳到主要内容

RFC 4648 - Base16、Base32 与 Base64 数据编码

  • 状态:建议标准(Proposed Standard)
  • 发布日期:2006 年 10 月
  • 流:IETF
  • 废止:RFC 3548
  • 勘误:无勘误

摘要​

本文档描述了常用的 Base64、Base32 与 Base16 编码方案,同时讨论了编码数据中换行符的使用、填充字符的使用、非字母表字符的使用、不同编码字母表的使用,以及规范编码。


本备忘录的状态​

本文档为互联网社区规定了互联网标准跟踪协议,并请求对其讨论与改进建议。有关该协议的标准化状态与状况,请参考《互联网官方协议标准》(STD 1)的当前版本。本备忘录的分发不受限制。


版权声明​

版权所有 (C) 互联网协会(2006)。


目录​

主要章节​


为什么基数编码很重要​

基数编码是互联网数据传输的基础。它将二进制数据转换为文本格式,使其能够在仅支持文本的环境中进行传输与存储。

核心用例​

编码主要用途典型应用
Base64通用二进制编码MIME 电子邮件附件、JWT 令牌、Data URI
Base64URLURL 安全编码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​

  • RFC 2045 - MIME 第一部分(为 MIME 定义 Base64)
  • RFC 3548 - 基数编码(已被 RFC 4648 废止)
  • RFC 7515 - JSON Web 签名(使用 Base64URL)
  • RFC 7519 - JSON Web Token(使用 Base64URL)