Base64 编码和解码函数
Base64 指特定的 MIME 内容转换编码。 Base64 编码将任意序列的八位元表示为一种需要区分大小写但是不需要容易被人识别的形式。
使用了 US-ASCII 中 65 个字符的子集,且每个可打印字符以 6 位表示。第 65 个字符“=”用于标记特殊处理功能。
编码过程将 24 位的输入位组表示为 4 个编码字符的输出字符串。按从左到右的顺序,24 位的输入组由 3 个 8 位的输入组连接组成。然后这 24 个位被处理为 4 个并置的 6 位组,每一组被转换为 Base64 字母表中的一个数字。
每个 6 位组均被用作到 64 个可打印字符的数组的索引。 索引引用的字符将放置在输出字符串中。
Base64 字母表
值 编码 值 编码 值 编码 值 编码
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (填充)=
15 P 32 g 49 x
16 Q 33 h 50 y
如果在被编码的数据末尾可用位数少于 24 位,将执行特殊处理。将始终在数量末尾处补全完整编码量。当输入组中的可用输入位少于 24 时,将(在右边)添加零位,以组成整数个数的 6 位组。通过使用“=”字符来执行在数据末尾的填充。由于所有 Base64 输入均是整数个数的八位元,因此仅会发生以下情况:
- 编码输入的最终量是 24 位的整数倍;此时,编码输出的最后单元将是 4 字符的整数倍,且不填充“=”。
- 编码输入的最终量恰好为 8 位;此时,编码输出的最后单元将是两个字符,后跟两个“=”填充字符。
- 编码输入的最终量恰好为 16 位;此时,编码输出的最后单元将是三个字符,后跟一个“=”填充字符。