Base64编码

编码字符串Man

ASCII 编码系统中字符 Man 被分别存储为 7779110,8-bit 二进制的值分别为 010011010110000101101110 . 这三个二进制值拼接成一个 24-bit 的字符串就是 010011010110000101101110 . 然后把他转码成相应的 Base64 字符值如下表:

]

如上表把 3 个字节转码成为 4 个字节,当要转码的字节数不能被 3 整除时就会像下面这样 :
用 0 填充额外的字节,然后再转码到 Base64 .
如果被转码的只有一个字节(比如 M),那么所有的 8-bit 数据都会被转码成 Base64 的前 12-bit (后面全 0 字节用特殊符号 = 代替) .

为什么要填充 2 字节的0呢?

因为进行 Base64 转码之前和之后的数据格式变化为 3 8-bit -> 4 6-bit . 所以解码过程为 4 个字节的 Base64 字符为一组可以解码成 3 个字节的 ASCII 字符 .

所以如果不填充到足够的字节的话,当两个 Base64 的字符串拼接后在解码过程中就会出现错误 . 所以在转码填充 0 值的时候,要填充后的总位数为 6 和 8 的公倍数 .

图例来源于 Wikipedia