BASE64解析流程详细分析

时间:2024-03-21 09:21:13

举例流程如下:

例子一
待分析内容:‘你好’
获取‘你好’UTF-8编码格式的字节内容:[-28, -67, -96, -27, -91, -67]
‘你好’UTF-8字节数组对应的二进制内容:[-28:11100100,-67:10111101,-96:10100000,-27:11100101,-91:10100101,-67:10111101]
按照拆分规则拆分:原数组每3个一组,总共24个位,3 *8=24,4 *6=24。把原来3个8位拆成4个6位
0原始数组:11100100 10111101 10100000
0分割数组:111001 001011 110110 100000
1原始数组:11100101 10100101 10111101
1分割数组:111001 011010 010110 111101
把所有6位数组补充成8位数组‘前面补充0’得到如下结果 二进制对应的十进制数
00111001:57 00001011:11 00110110:54 00100000:32 00111001:57 00011010:26 00010110:22 00111101:61
57 11 54 32 57 26 22 61
以上结果对照BASE64表得到的结果:5L2g5aW9

例子二
待分析内容:‘哈哈’
获取‘哈哈’UTF-8编码格式的字节内容:[-27, -109, -120, -27, -109, -120]
‘哈哈’UTF-8字节数组对应的二进制内容:[-27:11100101,-109:10010011,-120:10001000,-27:11100101,-109:10010011,-120:10001000]
按照拆分规则拆分:原数组每3个一组,总共24个位,38=24,46=24。把原来3个8位拆成4个6位
0原始数组:11100101 10010011 10001000
0分割数组:111001 011001 001110 001000
1原始数组:11100101 10010011 10001000
1分割数组:111001 011001 001110 001000
把所有6位数组补充成8位数组‘前面补充0’得到如下结果 二进制对应的十进制数
00111001:57 00011001:25 00001110:14 00001000:8 00111001:57 00011001:25 00001110:14 00001000:8
57 25 14 8 57 25 14 8
以上结果对照BASE64表得到的结果:5ZOI5ZOI

另外附上BASE64对照表

BASE64解析流程详细分析

注意点

以上例子都是中文,UTF-8编码恰好一个字符3个字节,如果是a这种一个字节,也会自动补充成三个字节不够补充0 ,对应表中还有一个pad为=号。所以有的时候base64最后面会多出来一个或者两个=号