Base64编码原理及应用

2,022 阅读4分钟

为什么需要Base64编码

我们知道计算机中的一个字节是由八个二进制数组成的,那总共就有256个组合,对应的就是ASCII编码,而ASCII编码前32位是表示翻页等功能的控制符,128~255之间的值是不可见字符。所以就造成了再计算机传输中有些ASCII不可见从而丢失或者转义错误的情况!

为了有效显示这些信息,Base64编码就是一种解决方案,简单来说它就是将原始数据转换成二进制之后进行再编码,而这个再编码的每一个单位是由6个二进制数组成,总共有64中组合,而这64个值都是我们能够正常显示和传输的!

Base64编码是什么

我们都知道,平时所看到的的字符串在计算机里最终都要转化为二进制数据,那同样是一串二进制数据,不同的编码方式就决定了这串数据表示的含义。

所谓Base64编码就是将原本需要8个二进制表示的一个字符重新截取分配成只要6个二进制数据表示,这样重新分配之后,一段Base654码所包含的6的二进制数据所能表示的十进制数就是0(000000)到63(111111),下图直观地表示了这个转化过程:

image

当然,比较理想的情况是原始字符串是3的倍数,那样就能完整地转化为Base64字符,如果原始值不能被3整除就用0值来补充原始字符串使原始值变成3的倍数,所以才会出现经过Base64转化之后字符长度会变成原来的4/3,也就是长了1/3.。下图中蓝色的部分就是补上的二进制数据:

image

所以Base64编码实际上就是将原始字符串经过重新编码后变成了64个可被机器识别、打印的字符(包含26个小写字母、26个大写字母、10个阿拉伯数字和+ /),当然如果最后两位选择不同的话就形成了Base64的不同变种,比如Base64 URL编码,下面是Base64的64个字符的编码对照表:

image

Base64编码的应用

Base64编码图片

作为优化网站加载速度的一种方式,可以让我们直接在HTML内嵌一些base64编码的图片,这样可以减少http请求。不过劲酒虽好不能贪杯,一定要注意分寸。前面我们提到了经过base64编码之后体积会增大1/3,所以对于一些很小的图片、icon是可以的,但对于一些细节较丰富的图片就得不偿失了。

其他数据传输

base64的出现本质上是一种将二进制数据转成文本数据的方案,所以对一些需要文本传输的系统例如邮件等会有应用。

关于文件类型转base64

关于文件类型的base64编码,面对一串图片的base64编码,我一度陷入沉思,这个东西究极代表啥,是存在服务器上的一串URL还是就是表示这个图片本身,后来经过查资料我想清楚了,这就是代表图片本身。因为一个文件在计算机上的表示最终还是要转为二进制的,二我们这个base64编码只不过是将表示图片信息的二进制数据用另一种我们看得懂的形式表示出来而已。至于图片转为二进制数据在不同语言中都有相应的工具类方法的。

总结

理解了base64的原理不难发现,它仅仅只是一种编码方式,连加密都算不上,就是一种将二进制数据转成我们看得懂的格式的编码方式,它使用场景很多,但也不能滥用,毕竟它是会让编码体积增大1/3,同时在不同的情境下可能有更好的编码方式选择,所以,多多了解一些才能做到有的放矢、游刃有余!

参考