浅谈Base64编码的原理

**

为什么会有Base64编码?

**
大家都知道,计算机最常用的存储方式都是用ASCII编码存储,然而有些情况下用ASCII编码来交换数据会造成错误,特别是ASCII中的控制字符,例如BS(退格),BEL(响铃)等,这些控制字符都是表示,当计算机碰到这些字符的时候要做出相应的动作,并不是普通的可打印字符。

而数据交换的过程中,每个路由对数据的处理并不完全一样,这些不可见的控制字符就很有可能被处理错误,于是,Base64编码就出现了。

**

Base64编码的组成形式

**
Base64编码是有64位可打印字符组成(a-z,A-Z,0-9,+,/),每个字符对应0-63中的一个十进制数字,由于只有64位字符,所以只需要6Bit(6位)就可以表示,但正常的一个字节会有8Bit(8位),因此需要在高位补0,所以Base64编码实际上就是00XXXXXX的形式表示,后六位的X才是有效数据。

**

Base64编码的编码原理

**
我们先想一下,1字节的ASCII编码是8Bit的有效长度,而1字节的Base64编码只有6Bit的有效长度,所以转换为Base64编码肯定是会造成浪费的,因此我们要找到最节约资源的方式——找6和8的最小公倍数,24。因此我们可以把3个字节(24Bit)的ASCII编码当成一组,分成4组,每组6Bit,然后高位补0(简单来说就是3*8=4*6)。

举个例子,ABC对应的ASCII编码是:
十进制 65 66 67
二进制 0100 0001 0100 0010 0100 0011
一组8Bit,3组为单位,分成一组6Bit,4组为单位:
010000 010100 001001 000011
高位补0:00010000 00010100 00001001 00000011
即:16 20 9 34
根据Base64编码表可以得出:16,20,9,34对应的是QUJi。
因此ABC转换为Base64编码就是QUJi。

虽说是3组24Bit为单位,但是有时候如果不够24Bit要怎么办呢?
例如A对应0100 0001,只可以划分为010000 01,但之前说过,Base64编码的有效长度是6Bit,这时候就需要在低位用0补够6位了,即:010000 010000,根据Base64编码表可以找到,010000 010000代表QQ,而Base64编码又是要以4组为一个单位的,但QQ只有2组,因此最终要用=补够4组,即最终A代表的Base64编码为QQ==。

**

小结

**
Base64编码最常见的就是用在邮件发送等通信中。这种编码有利有弊,弊端在于ASCII编码转换成Base64编码的时候,由于每个字节都需要多出2个没用的Bit,所以是会造成浪费的。但是这样子用Base64编码进行数据交换的时候,就可以减少很多错误了。

你可能感兴趣的:(Base64编码)