基于openssl的base64编解码

base64原理

base64是一种编码,并不是一种加密方式。一串base64编码的数据被任何人得到都可以进行解码。
base64编码原理建议参考:base64编码原理

基于openssl的base64编码

size_t BcBase64Encode(const void* data, int data_len, string& res)
{
    BIO* b64 = BIO_new(BIO_f_base64());
    BIO* bio = BIO_new(BIO_s_mem());

    bio = BIO_push(b64, bio);
    BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
    BIO_write(bio, data, data_len);
    BIO_ctrl(bio, BIO_CTRL_FLUSH, 0, NULL);

    BUF_MEM* bptr = NULL;
    BIO_get_mem_ptr(bio, &bptr);

    size_t slen = bptr->length;
    auto buffer = new char[slen + 2];
    memset(buffer, '\0', slen + 2);
    memcpy(buffer, bptr->data, slen);
    buffer[slen] = '\0';
    res = buffer;
    delete[] buffer;

    //BIO_free_all(b64);
    BIO_free_all(bio);
    return slen;
}

基于openssl的base64解码

void Base64Decode(const char* input, int in_length, string& out)
{
	BIO* b64 = NULL;
	BIO* bio = NULL;
	b64 = BIO_new(BIO_f_base64());
	BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
	bio = BIO_new_mem_buf(input, in_length);
	bio = BIO_push(b64, bio);

	auto output = (char*)malloc(in_length);
	memset(output, '\0', in_length);
	auto len = BIO_read(bio, output, in_length);
	out = output;

	free(output);
	BIO_free_all(bio);
	//BIO_free_all(b64);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值