Base64
是一种编码格式,可以将明文变成密文来发送,并非是一种加密方式。
实现原理如下:
- 将字符串
Man
用16进制表示分别为0x4D
0x61
0x6E
- 16进制转换成二进制表示为
01001101
01100001
01101110
- 将步骤二中的二进制数合并之后
010011010110000101101110
, 再以6位二进制数位为一组,进行重新分组,即010011
010110
000101
101110
- 每组新组成的二进制数表示 0 ~ (2^6 -1)的数值,可以对应到
Base64
的字母表中去,这样可以保证一定的安全性。在进行了Base64
编码之后,Man
变成了TWFu
。
Base64
中64是代表了 2^6 = 64,Base
就是基于这64个字母来进行编码的意思吧?
重点
如果以6位为一组对二进制数进行分组的话,很有可能出现多余的二进制位,无法得到完整的一组6位二进制数。在这种情况下,需要在这串二进制数后面进行补位,添加 0 即可。需要注意的是添加0,直到这一串二进制数的位数为 24 的整数倍。
为什么是24?
24 是 6 和 8 的最小公倍数,这样方便进行重新编码和分组。
假如说分完组之后,没有剩余,但是这串二进制数的位数并不是 24 的整数倍,该怎么办?
如果出现这样的问题,直接在这串二进制数后添加完整的一组 000000
来进行补位,直到这串二进制数的位数为 24 的倍数。000000
在 Base64
中对应的字符是 =
,因此在看到一串混乱英文字母之后跟着 =
那极有可能是补过位的一串二进制数。