基于openssl的base64加解密是怎样的
发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,今天就跟大家聊聊有关基于openssl的base64加解密是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.什么是base64base
千家信息网最后更新 2024年12月13日基于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安全错误
数据库的锁怎样保障安全
中专计算机网络技术试卷
北京天使互联网科技有限公司
查专利的数据库
云服务器内容会被泄露吗
上位机组太王软件开发
延庆区品质软件开发怎么样
science数据库
网络安全产品参数
数据库结构模型备案
数据库招聘
服务器端渲染SSR的实例
蔚来软件开发工作电脑
如何架设代理服务器
云服务器 socket
云服务器上挂的qq怎么签到
护苗网络安全科简报
网络安全写说100字
陕西省开票安全服务器地址
需求分析软件开发的时间
政府部门网络安全培训
孝义im即时通讯软件开发
数据库一对一关系举例
小型分布式软件开发软件
山西企业软件开发销售电话
天地劫新服务器第一周的三途川
东科网络技术有限公司
东软香港软件开发
手机上能用云服务器吗
数据库跑批
数据库监听端口占用