基于OpenSSL的Base64编码与解码(C/C++)

OpenSSL环境请自行安装,https://www.openssl.org/

需要的头文件:

#include <openssl/aes.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#include <openssl/bio.h>
#include <openssl/buffer.h>

Base64编码:

void base64_encode(const char * input,int in_length,char** output)
{
    BIO* bmem = NULL;
    BIO* b64 = NULL;
    BUF_MEM* bptr = NULL;
    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, input, in_length);
    BIO_flush(b64);
    BIO_get_mem_ptr(b64, &bptr);
    *output = (char *)malloc(bptr->length + 1);
    memcpy(*output, bptr->data, bptr->length);
    (*output)[bptr->length] = 0;
    BIO_free_all(b64);
    BIO_free_all(bmem);
}

Base64解码:

void base64_decode(const char * input,int in_length,char** output,int* out_length)
{
    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);
    *output = (char*)malloc(in_length);
    *out_length = BIO_read(bio, *output, in_length);
    BIO_free_all(bio);
    BIO_free_all(b64);
}

注意,两个函数的output请自行务必free,不然会造成内存泄漏~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值