1. base64编码简介
毫无疑问,base64是一种数据的编解码方法(算法)。更具体地描述,它是一种从二进制(blob)到字符的编解码。base64将3个字节,共24bits的数据,编码为6个bits为一个单元的4个数据单元。
如何解释呢?
通俗的讲,就是对原始的binary数据,按照每3个字节的序列进行分组。如果binary数据不是3个字节的整数倍,需要进行补全。因此,base64编码后的字符长度,必定是3字节(24比特)的整数倍。具体规范,见下文。
2. base64编解码规范
由定义可知,base64编码的每个字符是6个bits表示,因此总共是2^6 = 64个有效数据字符。实际上,还额外需要一个做padding的字符,base64规范中使用’=‘字符来对3字节对齐的尾部做padding补足。
目前,base64的编解码规范,主要使用RFC4648标准,其编码使用的可打印字符如下图。
需要注意的是:
- 按照二进制计算出的十进制索引的字符进行填充,例如:十进制的1就对应了字符'A'
- 编码后,数据长度增加。因为编码后用ASCII字符(8bits)来表示一个6bits的二进制数据,因此数据长度至少为原来的4/3倍。
- 二进制数据不足3字节的整数倍时,需要进行尾部填充(padding)。
- 为什么是3字节的整数倍?因为二进制数据都是以字节(8bits)为单位的,而6和8的最小公倍数是24(bits),也即3字节。
- 关于补全,有两种情况
- 单字节尾部,剩余不足6bits时,需要先填0补全跨字节边界的6个bits
- 完整字节的尾部直接按照每6bits补一个'='字符
- 等号仅会在尾部出现,且最多两个等号。