Base64是什么?
Base64是一种二进制到文本的编码方式。如果要更具体一点的话,可以认为它是一种将 byte
数组编码为字符串的方法,而且编码出的字符串只包含ASCII基础字符。例如字符串ShuSheng007
对应的Base64为U2h1U2hlbmcwMDc=
。
经常搞MQTT通信的小伙伴可能经常用,将自己的data通过Base64加密或者将接收的data解密,详细的介绍大家可以阅读一下:让你彻底理解Base64算法
这里分享一下利用OpenSSL库进行Base64加密、加密的封装函数。
#include <string.h>
#include <openssl/pem.h>
int encode_with_base64(char *str,int str_len,char *encode,int encode_len){
BIO *bmem,*b64;
BUF_MEM *bptr;
b64=BIO_new(BIO_f_base64());
BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
bmem=BIO_new(BIO_s_mem());
b64=BIO_push(b64,bmem);
BIO_write(b64,str,str_len); //encode
BIO_flush(b64);
BIO_get_mem_ptr(b64,&bptr);
if((int)(bptr->length) > encode_len){
printf("encode_len too small\n");
return -1;
}
encode_len=bptr->length;
memcpy(encode,bptr->data,bptr->length);
BIO_free_all(b64);
return encode_len;
}
int decode_with_base64(char *str,int str_len,char *decode,int decode_buffer_len){
int len=0;
BIO *b64,*bmem;
b64=BIO_new(BIO_f_base64());
BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
bmem=BIO_new_mem_buf(str,str_len);
bmem=BIO_push(b64,bmem);
len=BIO_read(bmem,decode,str_len);
decode[len]=0;
BIO_free_all(bmem);
return len;
}