一、使用背景
最近在写一套加密接口,数字签名校验老是失败,这是因为对称加密和非对称加密后的数据是二进制的,而二进制数据在网络环境中由于途径的路由设备可能对二进制中不可见字符的处理动作不同,这样就可能会在传输中造成错误,因此需要将数据进行base64编码成可见字符。
二、base64介绍
1、概念
base64是一种基于64个可打印字符来表示二进制数据**的表示方法。在Base64中的可打印字符包括字母A-Z
、a-z
、数字0-9
,这样共有62个字符,再加上‘+’和‘/’两个字符(不同的实现会有所不同)。base64使用‘=’作为填充字符。
2、算法
base64要求把每三个8Bit的字节转换为四个6Bit的字节,然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。 如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’,因此编码后输出的文本末尾可能会出现1或2个’=’, 表示补了多少字节,解码的时候,会自动去掉。
三、openssl中base64的使用
1、编码
/*
参数:
input:要编码的数据
length: input的长度
with_new_line: 是否使用base64的默认换行功能,true:使用
返回值:
编码后的数据
*/
unique_ptr<char[]> Base64Encode(const char* input, int length, bool with_new_line)
{
//创建一个base64对象
BIO* b64 = BIO_new(BIO_f_base64(