Base64是一种编码方式,将字节数组按照规则转换成可见字符,并不属于加密的范畴。虽然Base64不是一种加密算法,但Base64在加密中却很常用,往往作为最后一步,将加密后的数据进行Base64编码,转换成可见字符。
Base64编码,是将原字节数组按照3byte8bit转换成4byte6bit,将这4byte对应的值作为下标,在可见字符表中得到对应的可见字符。也就是将3byte转成4byte,不足4byte补’=’,最多补两个’=’。这也就是为什么Base64出来的结果在结尾处经常有’=‘或者’=='的原因。
下面通过示例,演示一下Base64的编码过程(比直接看代码更直观):
待编码字符:
"admin"
对应的字节数组:
[97,100,109,105,110]
对应的二进制表示:
[01100001,01100100,01101101,01101001,01101110]
重新按照6bit进行分组(最后一组不足6bit,在后面补0):
[011000,010110,010001,101101,011010,010110,1110 00]
转换成整数表示:
[24,22,17,45,26,22,56]
查表得到对应字符(不足4byte,补'='):
['Y','W','R','t','a','W','4','=']
可见字符表(大写字母 + 小写字母 + 数字 + '+' + '/'):
['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/']
因此,字符串“admin”对应的Base64编码值为“YWRtaW4=”。如果是“admi”,那么对应的Base64编码值为“YWRtaQ==”。所以,Base64编码之后,长度一定是4的倍数。
代码实现的核心围绕着怎么把字节数组重新安装6bit进行重组。其实从上面例子中的二进制表示法中很容易看出规律。这里就不再给出代码实现了,留给大家作为巩固的练习吧。(提示:这种位操作,当然是采用位运算最是方便快捷)
如果你已经完成了代码实现,那么回过头来看一下,如果只知道Base64的原理和代码实现,其实并不是很好理解其操作过程,毕竟人类习惯了10进制,对于二进制的位运算,并没有直观的感受(本人就是先看了原理和代码,发现不好理解,于是才有了上面的示例过程【哈哈】)。所以,对于位运算,往往二进制表示法更直观。