上网的每时每刻,你可能都在享受Base64带来的便利,但你对Base64的基本原理了解多少呢?今天这篇文章将带领大家了解Base64的底层实现。什么是Base64?base64编码是网络上常用的一种传输8bit字节数据的编码方式,所以可以基于:是一种编码方式,记住不是加密方式,它没有秘钥的概念,任何获得数据的人都可以解析它。它只是一种编码方法!它会用在什么地方?我们在传递参数的过程中肯定遇到过这样的情况:全英文使用没问题,但是一旦涉及到中文,就会出现乱码。同样,网络上传输的字符也不都是可打印的字符,比如二进制文件、图片等,Base64的出现就是为了解决这个问题。它是一种基于64个可打印字符表示二进制数据的方法。电子邮件刚出来的时候,只能传输英文,但后来随着用户的增多,中文、日文等字符的用户也有需求,但这些字符无法被服务器或网关有效处理,所以Base64出现了。随后,Base64也被用于URL、cookie和网页中,以传输少量二进制文件。实现原理的来龙去脉我们都知道了,但是还不知道它的原理,那就来了解一下吧。Base64编码将一个8位的子字节序列打散成6位的段,每个6位的段会分配一个字符,那么这个字符是什么?事实上,它是base64字母表中的64个字符之一。所以顾名思义就是base64。而这64个字符是很有讲究的,选择了最常用、兼容性最好的64个字符。所以可以算出base64编码后的字符串比编码前大了33%左右,因为用8位来表示6位。让我们看看下面的详细示例。Base64还有如下几条规则:①.3个字符变成4个字符。②每76个字符加一个换行符。③.终止符也应编码。例子中,编码前的数据是“Ow!”,编码后是4个字符的base64编码值“T3ch”。下面是具体的转换过程。1.字符串“Ow!”被分成三个8位字节(0x4F、0x77、0x21)。看下图:2、这3个字节构成了一个24位的二进制01001111、01110111、00100001。见下图:3、这些是序列010011、110111、011100、1000001,分成6个bits。看下图:4,每一个6位的值代表一个从0到63的值,在base64字母表中都有对应的字符。因此,表查找转换结果为4个字符的字符串“T3ch”。转换表如下图所示。整个过程就结束了,就这么简单,明白了吗?总结一下,大部分编码都是从字符串转为二进制,而Base64编码则是从二进制转为字符串。相反,Base64编码主要用于传输、存储、二进制表示等领域。不能算是加密,但是不能直接看到明文。加密也可以通过打乱Base64编码来完成。中文有多种编码(如:utf-8、gb2312、gbk等),不同的编码对应不同的Base64编码结果。
