美文网首页
Base64编码

Base64编码

作者: 乛小小白 | 来源:发表于2018-04-15 21:16 被阅读0次

    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!!”转换过程
    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值丢弃,因为它们实际上不携带有效信息。

    相关文章

      网友评论

          本文标题:Base64编码

          本文链接:https://www.haomeiwen.com/subject/gykjkftx.html