Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
将二进制数据编码为文本数据的过程。
Base64编码,顾名思义,用64个可读字符进行编码。与Hex的16个字符相比多了很多,但是比ASCII码又少了一倍,去除了不可读字符。既能够兼容ASCII码,又能够把任意一种编码形式转换成只使用可读字符就能表示的编码。
标准Base64编码中,这些字符是:
数字:0,1,2,3,4,5,6,7,8,9,共10个
小写字母:a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,共26个
大写字母:A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,共26个
加号+以及斜杠/
编码过程:
将其他编码形式的数据转换为二进制的形式,如01000100010011101100111010111100011001010......,每次取6个bit,计算对应的ASCII值,得到一个字符,这个字符一定在ASCII表的前64个字符中,即都是可见字符。再取下面的6个字符,转换为ASCII字符,如此下去……,最后将所有二进制转换为可见字符。
如果原文长度不能被3整除,base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号。显然添加等号的数目只能是0、1或2;
“hello!!”转换过程
Hello!! Base64
编码的结果为 SGVsbG8hIQAA
。最后2个零值只是为了Base64编码而补充的,在原始字符中并没有对应的字符,那么Base64编码结果中的最后两个字符 AA 实际不带有效信息,所以需要特殊处理,以免解码错误。从上面的过程我们可以得出:
- base64是把3个字节(3x8bit)变成4个可打印字符(4x6bit),所以base64编码后的字符串一定能被4整除(不算用作后缀的等号);
标准Base64编码通常用 = 字符来替换最后的 A,即编码结果为SGVsbG8hIQ==
。因为 = 字符并不在Base64编码索引表中,其意义在于结束符号,在Base64解码时遇到 = 时即可知道一个Base64编码字符串结束。
如果Base64编码字符串不会相互拼接再传输,那么最后的 = 也可以省略,解码时如果发现Base64编码字符串长度不能被4整除,则先补充 = 字符,再解码即可。
解码是对编码的逆向操作,但注意一点:对于最后的两个 = 字符,转换成两个 A 字符,再转成对应的两个6比特二进制0值,接着转成原始字符之前,需要将最后的两个6比特二进制0值丢弃,因为它们实际上不携带有效信息。
网友评论