Base64编码的组成
首先Base64编码使用6个二进制位来表示一个字符,而这6个二进制位刚好可以表示64个不同的字符,分表为26个大写和26个小写英文字母和0-9数字加上字符+和/来表示,如下表:
其中的等号“=”用来补全,这里你可能不太理解,我用个例子来解释,如下:
base的Base64编码为
YmFzZQ==
按照Base64编码的规则得到的应该是YmFzZQ,没有后面的两个“==”,加上等号的目的是使得到的编码为4的倍数,就像正常得到的是YmFzZQ为6位,加上两个“==”就是8位正好是4的倍数。
那为什么Base64编码得到的结果是YmFzZQ(那就得说说它的原理了)
首先,字符转换为二进制
会将要编码的字符转换为二进制(这里会用到ASCII码“在计算机中,每个字符都有一个对应的 ASCII 编码。字母 "b" 的 ASCII 编码是 98。然后,我们可以将这个数字转换为二进制。在 ASCII 编码中,使用 8 位二进制表示一个字符。所以,将 98 转换为二进制时,得到 01100010。”)
b:01100010
a:01100001
s:01110011
e:01100101
base:01100010011000010111001101100101
其次,将得到的二进制6各一组转换为十进制,再转换为Base64编码
根据得到的二进制,6个一组转换为十进制的数字,再从Base64编码表中找到对应的字符,最后的不够6位就用“0”来补齐,如下:
二进制-->十进制-->Base64编码
011000-->24-->Y
100110-->38-->m
000101-->5-->F
110011-->51-->z
011001-->25-->Z
010000-->16-->Q
最终得到的只有6位不是4的倍数故要加两个“=”来补全。