base64 编码介绍
base64 编码是一种常用的将十六进制转换为 可见字符的编码。
base64编码 在 rfc3548 中定义。
base64 编解码原理
将数据编码成 base64编码时, 以3个字节为一组, 转换为24bit的二进制数,将24bit的 二进制数 分成四组, 每组6bit。 对于每一组,得到一个数字:0-63。
表:
比如:
数据: 0x30 0x82 0x02 编码过程如下:
1) 得到 16进制数据: 30 82 02
2) 得到二进制数据: 00110000 10000010 00000010
3) 每6bit分组: 001100 001000 001000 000010
4) 得到数字: 12 8 8 2
5) 根据查表得到结果: M I I C
base64填充:
在要编码的字节数 不是3的 倍数的情况下,需要在右边加0 ...
有三种情况:
1) 输入数据 比特数 是 24的 整数倍 (输入字节为 3字节 整数倍 ), 则 无填充;
2)输入数据是 最后编码的 是 1个字节 (输入数据字节数 除3 余1), 补齐6比特 需要 加 2个00 , 查表后还需填充 2个 = 即 ( == ),这样最后一组能保证编码后是4个字符
3)输入数据最后编码 是 2个 字节(输入数据字节数 除3 余2),补起6比特 需要加一个 00 , 编码后需要填充 1个 “= ” ,这样最后一组能保证编码后是4个字符
因为编码后可能要填充 == 或 = 所以字符数 是4的倍数
举例如下:
对0x30编码:
1) 0x30 的二进制为: 00110000
2) 分组为: 001100 00
3) 填充2个 00: 001100 000000
4) 得到数字: 12 0
5) 查表得到的编码为MA ,另外加上两个==
最终编码为:MA==
base64 解码
是其编码过程的 逆过程。解码时,将base64 编码根据表展开,根据有几个等号去掉结尾的几个 00 , 然后每8比特 恢复即可。
openssl 中base64编解码函数的基本使用代码code