今天听到同事说,某某数据经过了base64加密,我瞬间懵圈,base64加密? base64在工作中很常见,但并不是加密技术,只是一种编码技术,今天聊聊base64编码!

首先,需要了解数据为什么要base64编码,base64编码的目的是为了把ASCII码中有些不可见字符转化为可见字符。用专业的话讲就是"Base64是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法"。首先浏览ASCII表:

ascii

ASCII中总共有128个字符,但有些字符是不可见的,比如回车、换行、发声音等字符,如果把不可见字符存入磁盘中,用文本工具看就会产生乱码。要实现存放在文件中又不乱码,就要把ASCII码中那些不可见字符转化为可见字符!同时,ASCII码中也有很多可见字符,其中大小写字母52个,0-9数字10个,再加上"+“、”/“,总共64个字符,这就是base64编码的来源。额外外还有一个后缀填充的”="字符。如果把ASCII码转化为成这64个可见字符,就解决了乱码问题!base64编码表如下:
base64_encode

base64的编码过程:

  1. 将每3个字节放入一个24位的缓冲区中,最后不足3个字节的,缓冲区的剩余部分用0来填补。
  2. 然后每次取出6位(2的6次方为64,使用64个字符即可表示所有),将高2位用0来填充,组成一个新的字节!
  3. 计算出这个新字节的十进制值,对应base64的编码表,输出相应的字符。这样不断地进行下去,就可完成对所有数据的编码工作。
  • 注意:因为不足三个字节会用0来填充,如果最后取出的位全是0,就用后缀填充符"=“表示,一个base64编码最多有两个”="*

按照以上规则对字符串"abc"编码如下:
base64_encode_example

[aaron@localhost ~]#echo -e 'abc\c' |base64
YWJj

# abcd占4个字节,4%3=1,所以后面需要用0填充两个字节,填充后最后12位全为0,12/6=2,所以有两个"="字符
[aaron@localhost ~]#echo -e 'abcd\c' |base64
YWJjZA==