base64 编码原理
Base64 编码是网络上最常见的用于传输8Bit字节码的编码方式之一,它是基于64个可打印字符来表示二进制数据的方法。
Base64 编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息,并且采用Base64 编码具有不可读性,需要解码后才能阅读。
编码前的字符为8位的ASCII编码,而编码后则为6位,其中包含的字符为:A-Z、a-z、0-9、+、/。共64个字符:26 + 26 + 10 + 1 + 1 = 64。【注:其实是65个字符,“=”是填充字符】
原理:
把每三个8Bit的字节转换为四个6Bit的字节
比如长度为3个字节的数据,数据位数为3*8=24位,base编码后为24 / 6 = 4字节。
长度为4个字节的数据,需添加2个0值字节,变为6个字节,数据位数为6*8 = 48位,base编码后为48 / 6 = 8字节,其中最后两位为 ” = “(见下方示例)。
长度为5个字节的数据,需添加1个0值字节,变为6个字节,数据位数为6*8 = 48位,base编码后为48 / 6 = 8字节,其中最后一位为 ” = ” (见下方示例)。
例:字符串“Xue”经过Base64编码后变为“WHVl”
"X" 对应的ASCII为 0101 1000
"u" 对应的ASCII为 0111 0101
"e" 对应的ASCII为 0110 0101
如果数据的字节数不是3的倍数,则其位数就不是6的倍数。因为6和8的最小公倍数为24,折合成字节数即为3。
故转化前的数据字节数必须为3的倍数,如果不够则补1个或2个零值字节,即补8个0或16个0。
转化时,会从末尾起,每隔6位全0的转化为”=”。
例:字符串“Xu”经过Base64编码后变为“WHU=”
例:字符串“X”经过Base64编码后变为“WA==”