OpenSSL中base64编解码使用

11 篇文章 0 订阅

/** *由于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;


//编码base64
string toBase64(string data)
{
   //创建一个bio内存块
   BIO* mem = BIO_new(BIO_s_mem());

   //创建一个一个base64对象快
   BIO* base64 = BIO_new(BIO_f_base64());
   

   //将base64和mem块链接起来,将mem添加到base64中
   base64 = BIO_push(base64, mem);

   //向base64写数据
   BIO_write(base64, data.data(), data.size());
   BIO_flush(base64);

   /*
   struct buf_mem_st {
    size_t length;              
    char *data;
    size_t max;                 
    unsigned long flags;
   };BUF_MEM
   */
   //得到内存对象的指针
   BUF_MEM* memPtr;
   BIO_get_mem_ptr(base64, &memPtr);
   string str = string(memPtr->data, memPtr->length);

   //将bio链释放
   BIO_free_all(base64);
   return str;

}

//解码base64
string frombase64(string data)
{  
   //创建一个bio base64对象块
   BIO* base64 = BIO_new(BIO_f_base64());
   
   //创建一个bio membuff的对象块
   BIO* mem = BIO_new_mem_buf(data.data(), data.size());

   //将base64加入到mem中
   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)
{
 //应用场景假设要上数据存储到数据库,这个字符串汉子需要将他先base64编码,再存储再数据库中,从数据取出去来了,先base64解码 这样数据才能一致性
 //编码 
   char* strdata = "你好哈哈&&*312dada";
   string tobaseData = toBase64(string(strdata, sizeof(str)));
   cout << "tobase64:   " <<  tobaseData.data() << endl;

   //解码
   string decode = frombase64(tobaseData);
   cout << "frombase64:   " <<  decode.data() << endl;

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间溜走了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值