/** *由于2进制有一些特殊的字符,在传输的过程传给对端对面解析乱码问题 *\0也是特使字符在传输的过程中读取的时候遇到\0系统认为是结束字符所以导致数据不完整 *含有中文的数据写进数据库数据库存储也会乱码 读取出去也会乱码 *为了解决了以上的问题我们引用了base64进行编码,生成二进制的时候 存储或者传输的时候我们先将他们base64转码之后在进行存储或者传输 *openssl 里面封装bio对象的 可以对base64操作 */
#include<openssl/buffer.h>
#include<openssl/bio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<json/json.h>
#include<fstream>
#include<iostream>
#include<openssl/sha.h>
#include<openssl/rsa.h>
#include<openssl/pem.h>
#include<openssl/buffer.h>
#include<openssl/bio.h>
#include<openssl/ecerr.h>
using namespace std;
using namespace Json;
string toBase64(string data)
{
BIO* mem = BIO_new(BIO_s_mem());
BIO* base64 = BIO_new(BIO_f_base64());
base64 = BIO_push(base64, mem);
BIO_write(base64, data.data(), data.size());
BIO_flush(base64);
BUF_MEM* memPtr;
BIO_get_mem_ptr(base64, &memPtr);
string str = string(memPtr->data, memPtr->length);
BIO_free_all(base64);
return str;
}
string frombase64(string data)
{
BIO* base64 = BIO_new(BIO_f_base64());
BIO* mem = BIO_new_mem_buf(data.data(), data.size());
BIO_push(base64, mem);
char* buf = new char[data.size()];
memset(buf, 0 , sizeof(buf));
BIO_read(base64, buf, data.size());
BIO_free_all(base64);
string str = string(buf, data.size());
return str;
}
int main(int agrc, char** agrv)
{
char* strdata = "你好哈哈&&*312dada";
string tobaseData = toBase64(string(strdata, sizeof(str)));
cout << "tobase64: " << tobaseData.data() << endl;
string decode = frombase64(tobaseData);
cout << "frombase64: " << decode.data() << endl;
}