E.3 Base-64填充

Base-64 编码收到一个 8 位字节序列,将这个二进制序列流划分成 6 位的块。二进制序列有时不能正好平均地分成 6 位的块,在这种情况下,就在序列末尾填充零位,使二进制序列的长度成为 24 的倍数(6 和 8 的最小公倍数)。

对已填充的二进制串进行编码时,任何完全填充(不包含原始数据中的位)的 6 位组都由特殊的第 65 个符号“=”表示。如果 6 位组是部分填充的,就将填充位设置 为 0。

表 E-2 显示了一些填充实例。初始输入字符串“a:a”为 3 字节(24 位)。24 是 6 和 8 的倍数,因此无需填充,得到的 Base-64 编码字符串为“YTph”。

表E-2 Base-64填充实例

输入数据 二进制序列(填充位以x表示) 已编码数据
a:a 011000 010011 101001 100001 YTph
a:aa 011000 010011 101001 100001 011000 01xxxx xxxxxx xxxxxx YTphYQ==
a:aaa 011000 010011 101001 100001 011000 010110 0001xx xxxxxx YTphYWE=
a:aaaa 011000 010011 101001 100001 011000 010110 000101 100001 YTphYWFh

然而,再增加一个字符,输入字符串会变成 32 位长。而 6 和 8 的下一个公倍数是 48,因此要添加 16 位的填充码。填充的前 4 位是与数据位混合在一起的。得到的 6 位组 01xxxx,会被当作 010000、十进制中的 16,或者 Base-64 编码的 Q 来处理。剩下的两个 6 位组都是填充码,用“=”表示。