基于openssl的base64加解密是怎样的
发表于:2025-01-30 作者:千家信息网编辑
千家信息网最后更新 2025年01月30日,今天就跟大家聊聊有关基于openssl的base64加解密是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.什么是base64base
千家信息网最后更新 2025年01月30日基于openssl的base64加解密是怎样的
今天就跟大家聊聊有关基于openssl的base64加解密是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
1.什么是base64
base64指64个可打印字符,"A-Z" 、"a~z"、 "0~9" 、 "+" 、"/" 共64个。一般使用base64来表示二进制数据(二进制流的每个字节不可能全部是可见字符,所以就传送不了,可以采用base64转换后传输)。
2.使用openssl的库封装base64的加解密库
使用动态内存分
/************************************************ @Filename: base64_1_by_openssl.c* @Author:edwin* @Description: ---* @Create: 2020-12-21 10:19:20* @Last Modified: 2020-12-21 10:31:39***********************************************/#include
#include #include #include "openssl/evp.h"#include "openssl/bio.h"#include "openssl/buffer.h"char * base64_encode(const char *input, int length, bool newLine);char * base64_decode(const char *input, int length, bool newLine,int *outLength);int main(int argc, char* argv[]){ bool newLine = false; char input[64] = "test string"; int outlength; char * encode = base64_encode(input, strlen(input), newLine); char * decode = base64_decode(encode, strlen(encode), newLine,&outlength); printf("base64 encode:%s\n",encode); printf("base64 decode:%s\n,output length:%d\n",decode,outlength); free(encode); free(decode); return 0;}// base64编码,输出长度为字符串的长度,如果需要可以再使用strlen获取char * base64_encode(const char *input, int length, bool newLine){ BIO *bmem = NULL; BIO *b64 = NULL; BUF_MEM *bptr; b64 = BIO_new(BIO_f_base64()); if (!newLine) { BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); } bmem = BIO_new(BIO_s_mem()); b64 = BIO_push(b64, bmem); BIO_write(b64, input, length); BIO_flush(b64); BIO_get_mem_ptr(b64, &bptr); BIO_set_close(b64, BIO_NOCLOSE); char *buff = (char *)malloc(bptr->length + 1); memcpy(buff, bptr->data, bptr->length); buff[bptr->length] = '\0'; BIO_free_all(b64); return buff;}// base64解码char * base64_decode(const char *input, int length, bool newLine,int *outLength){ BIO *b64 = NULL; BIO *bmem = NULL; char *buffer = (char *)malloc(length); if(buffer == NULL){ return NULL; } memset(buffer, 0, length); b64 = BIO_new(BIO_f_base64()); if (!newLine) { BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); } bmem = BIO_new_mem_buf(input, length); bmem = BIO_push(b64, bmem); *outLength = BIO_read(bmem, buffer, length); BIO_free_all(bmem); return buffer;} 2. 使用数组,报文相对稳定,这样降低系统开销(虽然可能微不足道)
/************************************************ @Filename: base64_2_by_openssl.c* @Author:edwin* @Description: ---* @Create: 2020-12-21 10:19:20* @Last Modified: 2020-12-21 11:33:41***********************************************/#include
#include #include #include "openssl/evp.h"#include "openssl/bio.h"#include "openssl/buffer.h"char * base64_encode(const char *input, int inputLength, bool newLine,char *output,int outputMaxLength);char * base64_decode(const char *input, int inputLength, bool newLine,char *output,int outputMaxLength,int *outLength);int main(int argc, char* argv[]){ bool newLine = false; char input[64] = "Hello World!i\nsddsdds"; char output[64]; char * encode = base64_encode(input, strlen(input), newLine,output,64); printf("base64 encode:%s\n",encode); int outlength=0; char * decode = base64_decode(encode, strlen(encode), newLine,output,64,&outlength); printf("base64 decode:%s\n,output length:%d\n",output,outlength); return 0;}// base64 编码char * base64_encode(const char *input, int inputLength, bool newLine,char *output,int outputMaxLength){ BIO *bmem = NULL; BIO *b64 = NULL; BUF_MEM *bptr; b64 = BIO_new(BIO_f_base64()); if (!newLine) { BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); } bmem = BIO_new(BIO_s_mem()); b64 = BIO_push(b64, bmem); BIO_write(b64, input, inputLength); BIO_flush(b64); BIO_get_mem_ptr(b64, &bptr); BIO_set_close(b64, BIO_NOCLOSE); if(bptr->length >= outputMaxLength){ BIO_free_all(b64); return NULL; } memcpy(output, bptr->data, bptr->length); output[bptr->length] = '\0'; BIO_free_all(b64); return output;}// base64 解码,输出数组的大小应大于输入字符串大小以保证有足够空间char * base64_decode(const char *input, int inputLength, bool newLine,char *output,int outputMaxLength,int *outLength){ BIO *b64 = NULL; BIO *bmem = NULL; b64 = BIO_new(BIO_f_base64()); if (!newLine) { BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); } bmem = BIO_new_mem_buf(input, inputLength); bmem = BIO_push(b64, bmem); *outLength = BIO_read(bmem, output, inputLength); if(*outLength >= outputMaxLength){ BIO_free_all(bmem); return NULL; } output[*outLength] = '\0'; BIO_free_all(bmem); return output;}
看完上述内容,你们对基于openssl的base64加解密是怎样的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
字符
内容
二进制
大小
字符串
数组
编码
长度
输出
微不足道
内存
动态
字节
开销
报文
数据
更多
知识
空间
篇文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
商洛网络安全技能
创建数据库使用utf-8
适用于数据库开发的是
金融科技之互联网思维
数据库下载路径
软件开发完工百分百工作量
湖州育 星网络技术有限公司
数据库建在什么地方
欧美服务器租用在哪里
长沙澳博软件开发有限公司 收银
景安 服务器
本地服务器安全证书
戴尔服务器 初始密码
高级筛选选择数据库
实体数据库标准国标
企业网络安全防护初级考试答案
14国三网络技术习题下载
ajax 查询数据库
魔兽世界怎么有其他服务器的人
安卓数据库怎么恢复
如何查看数据库新增字段
数据库通信流程
佛山专业软件开发销售厂
服务器温度怎么控制
东北软件开发公司有哪些
数据库同名实例
星韵全能抽奖软件开发公司
深圳开源网络技术公司
数据库系统如何实现数据共享
情人节软件开发