openssl 中base64编解码函数的基本使用代码code

本文介绍了OpenSSL库中用于Base64编码和解码的主要函数,包括EVP_EncodeInit、EVP_EncodeUpdate、EVP_EncodeFinal等编码函数,以及EVP_DecodeInit、EVP_DecodeUpdate、EVP_DecodeFinal等解码函数。这些函数支持格式化和非格式化的Base64操作,编码会将数据拆分为80字符一行。在非格式化情况下,EVP_EncodeBlock和EVP_DecodeBlock可直接使用,但可能需要手动处理结束符号。
摘要由CSDN通过智能技术生成

OpenSSL 中用于base64 编解码的函数主要有:

 

 

编码函数

EVP_EncodeInit   编码前初始化上下文

EVP_EncodeUpdate   进行base64编码, 本函数可多次调用

EVP_EncodeFinal       进行base64编码,并输出结果

EVP_EncodeBlock      进行base64编码

 

解码函数

EVP_DecodeInit            解码前初始化上下文

EVP_DecodeUpdate     base64解码,本函数可多次调用

EVP_DecodeFinal        base64解码,并输出结果

EVP_DecodeBlock       base64解码,可单独调用

base64.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/evp.h>


int main()
{
    EVP_ENCODE_CTX ectx, dctx;
    unsigned char in[500], out[800], d[500];
    int inl, outl, i, total, ret, total2;

    EVP_EncodeInit(&ectx);
    for(i=0; i< 500; i++)
        memset(&in[i],i, 1);
    
    inl = 500;
    total = 0;
    EVP_EncodeUpdate(&ectx, out, &outl, in, inl);
    total +
OpenSSLBase64编码和解码是一个常见的操作,用于将二进制数据转换成ASCII格式,以便在网络传输或存储时避免特殊字符。以下是使用OpenSSL库进行Base64编码和解码的基本步骤: ### Base64编码 ```c #include <openssl/bio.h> #include <openssl/evp.h> // 编码函数示例 void encode_base64(const unsigned char* input, int input_length, char* output) { BIO* bio_out = BIO_new(BIO_s_mem()); BIO* bio_enc = BIO_new(BIO_f_base64()); // 设置BIO,输入BIO为内存,输出BIO为Base64编码 BIO_set_flags(bio_enc, BIO_FLAGS_BASE64_NO_NL); BIO_push(bio_enc, bio_out); // 开始编码 BIO_write(bio_out, input, input_length); BIO_flush(bio_out); // 获取编码后的长度,并添加换行符(因为默认的BIO_f_base64()会在每个线程结束时添加换行) int out_len = BIO_get_num_bytes(bio_out); output = (char*)malloc(out_len + 1); // 加一以容纳潜在的终止NULL字符 BIO_gets(output, bio_out); // 输出到字符串 output[out_len] = '\0'; // 清理资源 BIO_free_all(bio_out); } ``` ### Base64解码 ```c #include <openssl/bio.h> #include <openssl/evp.h> // 解码函数示例 int decode_base64(char* input, char* output, int input_length) { BIO* bio_in = BIO_new_mem_buf(input, input_length); BIO* bio_dec = BIO_new(BIO_f_base64()); BIO* bio_out = BIO_new_fp(output, BIO_NOCLOSE | BIO_FP_TEXT); // 创建一个新的文件指针输出 // 设置BIO,输入BIO为Base64编码,输出BIO为文件指针 BIO_set_flags(bio_dec, BIO_FLAGS_BASE64_NO_NL); BIO_push(bio_dec, bio_in); BIO_push(bio_out, bio_dec); // 开始解码 int ret = BIO_read(bio_in, output, -1); // 读取全部内容直到EOF if (ret <= 0) return ret; // 关闭BIO并清理资源 BIO_pop(bio_out); BIO_pop(bio_dec); BIO_free_all(bio_in); // 根据实际读取的字节数更新output的实际长度(去掉末尾的空格或换行) output[ret] = '\0'; return ret; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值