在扩展的ASCII码中,每个字符用一个字节表示,在不考虑正负号情况下,一个字符可表示的范围是(0x00~0xFF),其中0~31以及127~255都是不可打印字符。但在传输不可打印字符时,可能出现字符丢失或转义错误的情况。
注意:Base码都要先转换为十进制数的ASCII码或十六进制的ASCII码,然后再转换为二进制数。比如一个文本为A,那么:A对应的ASCII十进制数是65,那么先转换为ASCII码,然后再转换为二进制数。
把不可转义字符ASCII码转换为可打印字符,Base64编码就是这样的一种转换方式。
Base64编码组成:大写字母、小写字母、数字、+或/、等号。这些都可以有
Base64编码每4位一组,Base64编码中,最多只有两个等号,当发现有等号的编码时,不用怀疑,就是Base64编码,Base64编码的等号数量为:0或1或2。1个等号隐藏2个比特信息,2个等号隐藏4个比特信息
Base64编码后的字符串长度一定会被4整除,包括用作后缀的等号;如果明文字符数不能被3整除,余1时,1个字符就转换为2个,补两个等号,共4个字符;余2时,2个字符会转换为3个字符,补1个等号。
归根结底一句话:经过Base64编码后的字符后的字符串长度一定会被4整除 (包括后缀等号)
Base64编码:
Base64编码流程:
1.将ASCII码字符串根据ASCII码对照表转换为八位二进制数值
2.把二进制数值按每6位进行划分
3.然后6位二进制转化为十进制数根据对照表找到Base64编码字符
举例:
这里举了三个字母大写M,小写a和n
在ASCII编码中,M,a,n对应的编码十进制数为:77,97,110
然后把77,97,110转换为8位二进制数,转换后,将这24位二进制数划分为6位一组,再转换为十进制数,对照Base64编码的数。
但是如果当字符串长度不是3的倍数,那么ASCII编码转换为二进制数就不能划分为每6位一组了,也就不能编码为Base64,这样情况的话,就需要用0补位,如果6位全是0的话,就用等号(=)来表示
归根结底:如果ASCII编码是3位数,则不需要补0,转换为2进制数,分为6为一组即可求出Base64编码。如果ASCII编码是2位或1位,转换后的二进制数是不够24位的,则需要转换后的2进制数后加0,知道加到24位能让base64组成4位一组,如果有一组Base64编码的6位二进制数全为0,那么就用等号代替
base64的编码具有很高的辨识度,很多时候的base64编码后都会携带等号