E.2 8位到6位

Base-64 编码将一个 8 位字节序列拆散为 6 位的片段,并为每个 6 位的片段分配一个字符,这个字符是 Base-64 字母表中的 64 个字符之一。这 64 个输出字符都是很常见的,可以安全地放在 HTTP 首部字段中。这 64 个字符中包含大小写字母、数字、+ 和 /,还使用了特殊字符 =。表 E-1 显示了 Base-64 的字母表。

注意,由于 Base-64 编码用了 8 位字符来表示信息中的 6 个位,所以 Base-64 编码字符串大约比原始值扩大了 33%。

表E-1 Base-64字母表

 

 0   A   8   I   16   Q   24   Y   32   g   40   o   48   w   56   4 
 1   B   9   J   17   R   25   Z   33   h   41   p   49   x   57   5 
 2   C   10   K   18   S   26   a   34   i   42   q   50   y   58   6 
 3   D   11   L   19   T   27   b   35   j   43   r   51   z   59   7 
 4   E   12   M   20   U   28   c   36   k   44   s   52   0   60   8 
 5   F   13   N   21   V   29   d   37   l   45   t   53   1   61   9 
 6   G   14   O   22   W   30   e   38   m   46   u   54   2   62   + 
 7   H   15   P   23   X   31   f   39   n   47   v   55   3   63   / 

图 E-1 是一个简单的 Base-64 编码实例。在这里,三个字符组成的输入值“Ow!”是 Base-64 编码的,得到的是 4 个字符的 Base-64 编码值“T3ch”。它是按以下方式工作的。

图片 | 第217页 | HTTP_ The Definitive Guide | xjpvictor的电子书库

图 E-1 Base-64 编码实例

 
  1. 字符串“Ow!”被拆分成 3 个 8 位的字节(0x4F、0x77、0x21)。

  2. 这 3 个字节构成了一个 24 位的二进制值 010011110111011100100001。

  3. 这些位被划分为一些 6 位的序列 010011、110111、01110、100001。

  4. 每个 6 位值都表示了从 0 ~ 63 之间的一个数字,对应 Base-64 字母表中 64 个字符之一。得到的 Base-64 编码字符串是个 4 字符的字符串“T3ch”,然后就可以通过线路将这个字符串作为“安全的”8 位字符传送出去,因为只用了一些移植性最好的字符(字母、数字等)。