关于base64编码
- base64编码,就是把二进制bit串按24位分段(3个字节),每段内又按6位分组,每组编码为一个字符。字符表对应关系即码表的长度为64(所以称之为base64编码),如下所示:
000000---'A' 000001---'B' ...... 011000---'Y' 011001---'Z'
011010---'a' 011011---'b' ...... 110010---'y' 110011---'z'
110100---'0' 110101---'1' ...... 111100---'8' 111101---'9'
111110---'+' 111111---'/'
也就是说每三个字节编码为4个字符。
- 例如:
3个字节的二进制比特串: 10101101 00111010 01110110 (0xae3a76)
按6位分组: 101011 010011 101001 110110
base64编码结果: rjp2
如果二进制比特串的长度不是24的倍数,即字节数不是3的倍数,则填充等号=,具体规则如下:
a)如果最后剩余两个字节,例如01000010 01000011,16个bit,则先在后面补两个0,变为18个bit,即6的倍数,然后分组为:010000 100100 001100,编码为:QkM,最后再在后面补一个等号=,最终的编码结果为:QKM=
b)如果最后剩余一个字节,例如01000001,8个bit,则先在后面补4个0,变为12个bit,即6的倍数,然后分组为:010000 010000,编码为QQ,最后再在后面补两个等号,最终的编码结果为:QQ==
总之,对二进制bit串进行分段,无论是前面的3字节段,还是最后剩余的2字节或1字节段,每段编码出来的字符均为4个。
按照以上规则,如果输入的字节数是28,则按3个字节分段,可分10段(最后一段只有1个字节),最终编码出来的字符串应该是40个字符。
关于base32编码
- 编码规则是:任意给定一个二进制数据,以5个字节(40bit)为一段进行切分,每段再以5个位bit为一组进行切分,对切分而成的每个组进行编码,得到1个可见字符。Base32编码表字符集中的字符总数为25=32个,这也是Base32名字的由来。标准的Base32编码表,如下所示:
00000---'A' 00001---'B' ....... 10111---'X' 11000---'Y' 11001---'Z'
11010---'2' 11011---'3' 11100---'4' 11101---'5' 11110---'6' 11110---'7'
- 例如要对一段字符串“bhsta”进行base32编码:
其ASCII码组成的二进制比特串:01100010 01101000 01110011 01110100 01100001
5个bit为一组进行切分:01100 01001 10100 00111 00110 11101 00011 00001
最后查码表,得到编码结果:MJUHG5DB
如果最后一组不足5个bit,则用0填充;如果最后一段不足8组,用等号=填充。
- 例如字符串”bhst”进行base32编码:
其ASCII码组成的二进制比特串:01100010 01101000 01110011 01110100
5个bit为一组进行切分:01100 01001 10100 00111 00110 11101 00000
最后一组不足5bit,所以在后面填充了3个0
查码表,得到结果为:MJUHG5A,这一段不够8组,故后面填充一个等号=
最终的编码结果为:MJUHG5A=
总之,对二进制bit串进行分段,无论是前面的5字节段,还是最后剩余的不足5字节的段,每段编码出来的字符均为8个。