最近发现一些同学在学习中对Base64编码的理解有些模糊,所以在此给这部分同学解释下Base64编码的底层实现。
要想知道Base64编码,那么首先就得知道什么是编码。编码就是利用特定的算法,对原始内容进行处理,生成运算后的内容,形成另一种数据的表现形式,可以根据算法,再还原回来。举个简单的例子,战争时期大家发电报下达命令肯定都不会直接发明文,因为会被地方电台截取到消息,所以都会把原文用另一种方式表示出来,让敌人看不懂,而己方人员却可以很轻松的把原文还原回来,这就是编码和解码。而Base64就是一种编码的算法,根据这种算法就可以把任意的二进制数据转成特定的字符来表示,那么具体是怎么做的呢,我们来详细说一下。
首先从名字上来说,Base64就是说这种编码只支持64个可打印字符,包括大小写英文、数字、+、/(一共64个字符)。早期的一些邮件协议,例如SMTP协议,只能传输可打印的字符,导致原本8bit的一个字节(0-255)超出了可表示的范围。例如一个数值是181的数值就超出了可打印字符的范围。这时候,Base64就出现了,它可以使用6bit的字符表示原来8bit才能表示的数值。但是6bit肯定不能直接把8bit的数值全表示出来,所以Base64采取了用4个6bit字符表示3个8bit字符的方式,也就是取6和8的最小公倍数24.这样,就可以用4个Base64字符来表示原来的3个普通字符了。如下图:
转换的方式就是用原来的字符获取字节,每三个字符转成Base64编码的4个字符,具体转码方式如下:
好了,说了这么多,大家一定大体了解了Base64的底层实现方式和大体用法了,希望能给大家带来一些启发。