Base64编码可以对字符串(中英文),字节集进行编码转换,核心思想就是3个字节一组进行处理,到最后不足3个字节,用00代替,被代替的用字符=来表示。
下面举三个例子就能立马明白:
例1、 "Bug"(正好3个字节,最简单的一种):
1.先转化成ASCII编码,如下图
2.图中的为十六进制,我们需要把他们转换成二进制分别为:
01000010,01110101,01100111
注意这里二进制是8位的,前面的0不能少
3.我们把3个二进制合并一下变成
010000100111010101100111
4.在把他们平均分割成四等份,四个新的二进制数诞生了,结果如下:
010000/100111/010101/100111
010000,100111,010101,100111
5.继续把这四个二进制数转换成十进制数,结果如下:
16,39,21,39
6.根据Base64 编码表,查找相对应的字符即可,最后得出结果:QnVn
例2、 "算法"(正好4个字节,需要补全两个字节):
1.先转化成ASCII编码,如下图
2.前三个字节转换方法与例1相同,这里不再分析,直接得出结果y+O3,我们看下最后一个字节A8,补全成3字节如下:
A8,00,00
3.把他们转换成二进制分别为:
10101000,00000000,00000000
4.合并后分割成四等份
101010 000000 000000 000000
42,0,0,0
5.由于我们在后面补全了两个字节,所以后面必须得有两个=号。42与第一个0可以去表中查询,后面的两个0可以理解成异常用=表示,得出结果qA==
6.最终结果:y+O3qA==
例3、 一张GIF图片(选取一张特别小的图片研究,最后需补全一个字节):
1.前面33个字节直接略过,得出结果:R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQB
2.剩下两个字节补全成3个字节如下:
00,3B,00
3.把他们转换成二进制数,结果如下:
00000000,00111011,00000000
4.合并后分割成四等份
000000 000011 101100 000000
0,3,44,0
5.由于最后补全了一个字节,所以最后一位为=号,前面三位去表中查询,得出结果ADs=
6.最终结果:R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=
补充:(反编码还原)
1.这里就举一个例子,逆着编码的思想来。以"T0s="为例
从表中查询对于编码为:
19,52,44,00
2.转换为二进制数如下:
10011,110100,101100,000000
3.合并后分成三等份并转换为十六进制ASCII码:
1001111 01001011 00000000
4F,4B