Base64编码原理非常简单,首先确定好要编码的字符串,并查找其对应的
ASCII码将其转换为二进制表示,每三个8位的字节转换为四个6位的字节
(3×8=4 ×6=24),把6位的最高位添两位数字0 ,组成四个8位的字节,因此转换 后的字符串将要比编码前的字符串长1/3 。转换后,再将二进制转换为十进制表 示,对应Base64编码的索引表(见表6-1)查阅出该十进制对应的字母,由此最终 获得Base64编码。
表6-1 Base64编码的索引表
下面来看两个例子。
例6-1 将A 、B 、C进行Base64编码,计算Base64编码结果。具体步骤如下:
1)查A 、B 、C对应的ASCII码,结果为65 、66 、67。
2)索引值65 、66 、67所对应的二进制数为01000001 、01000010、 01000011。
3)每三个8位的字节转换为四个6位的字节:010000 、010100 、001001、 000011。
4)将四个6位的最高位添两位数字0 ,组成四个8位的字节:00010000、 00010100 、00001001 、00000011。
5)将获得的二进制转换为十进制表示:16 、20 、9 、3。
6)对应Base64编码表查找出该十进制对应的字母为Q 、U 、J 、D。
用在线工具验证一下,如图6-8所示,发现结果和手动计算的一致。
图6-8 用在线工具验证A 、B 、C的Base64编码结果
依照上面的方式,如果获得的二进制数据不能划分为6位的整数倍时,又该 如何计算呢?比如字母A的Base64编码,再比如AB的Base64编码?此时就需要在 不够6位的位置上补0 ,以达到编码所需位数。需要注意的是,Base64编码后产生 的字节位数是8的倍数,如果不够位数,则以“=”填充。
例6-2 计算字母A 、B的Base64编码。具体步骤如下:
1)查A 、B对应的ASCII码,结果为65 、66。
2)索引值65 、66所对应的二进制数为01000001 、01000010。
3)将8位的字节转换为6位的字节:010000 、010100 、001000。
4)将6位的最高位添两位数字0 ,组成三个8位的字节:00010000、 00010100 、00001000。
5)将获得的二进制数转换为十进制表示:16 、20 、8。
6)对应Base64编码表查阅出该十进制对应的字母为Q 、U 、I 、=。
用在线工具进行验证,如图6-9所示,发现得到的结果和手动计算的一致。
图6-9 用在线工具验证A 、B的Base64编码结果