计算机基础知识,我们讲求的是原理、为什么是这样?
什么是base64
base64是网络里传输数据的编码方式之一,尤其处理一些不可打印字符转换为可打印字符后,方便传输
base64如何编码先在这里做一个简单base64编码
原始字符串: hello
base64后:aGVsbG8=
我们来逐步学习是如何进行的?
我们首先得了解ASCII表,并查看每个字符的ASCII值,可见
第一步
经过查阅,我们得到如下:ASCIIhello十进制104101108108111
二进制0110 10000110 01010110 11000110 11000110 1111
上表格中
第一行是 h e l l o 这几个字符
第二行是 每个字符在ASCII表中的十进制数
第三行是 每个字符在ASCII表中对于的二进制数
第二步
我们得到字符串对于的二进制串是(每个字符的二进制依次连接而已):
0110 1000 0110 0101 0110 1100 0110 1100 0110 1111
第三步
对上面从左到右,按每6位一组,进行分组
如果末尾不足6位,则自动以 0 补齐,以凑够6位得到如下:
011010 000110 010101 101100 011011 000110 111100
这串中末尾剩余 4 位,补齐了 2 个0,凑齐了 6 位一组
第四步
对上面每个6位组前补齐00,得到如下:
00011010 00000110 00010101 00101100 00011011 00000110 00111100
第五步
对上面每个8位得到其十进制表示:
26 6 21 44 27 6 60
第六步
查阅base64字符表:索引对应字符索引对应字符索引对应字符索引对应字符索引对应字符索引对应字符0A10K20U30e40o50y
1B11L21V31f41p51z
2C12M22W32g42q520
3D13N23X33h43r531
4E14O24Y34i44s542
5F15P25Z35j45t553
6G16Q26a36k46u564
7H17R27b37l47v575
8I18S28c38m48w586
9J19T29d39n49x597
608
619
62+
63/
对第五步得到串查阅base字符表分别为:
a G V s b G 8
第七步
由于用了补齐位,所以我们需要用 = 来代替表示我们用了补齐
以 = 代表 00,那 == 代表了 0000
我们第三步补齐了 00
所以我们得到最后的base64串
aGVsbG8=
总结base64特点
1、从base64字符表可以看出,base64后只能包括0-9a-zA-Z+/等64种可打印字符
2、原始字符串的位数是 8 n (假设n个字符),我们经过按6位分组后,肯定会有剩余不足6位的情况
3、由于 (8n) % 6,取模运算,结果可能值为 0 2 4,分别对应需要不足的位数是 0 4 2,才能凑6
4、由一个=对应00,因此base64后字符串尾部有可能出现=或者==
base64解码
base64编码是个可逆过程,因此解码只要按照编码的逆序进行即可