openssl base64 编、解码
最近项目上需要对一段二进制串进行 base64编码、解码, base64编码、解码的算法并不复杂,自行实现也不会引入太大代价,不过既然openssl 有比较成熟的实现,直接调用库代码自然是比较明智的选择。
Ø EVP_EncodeInit函数
原型:void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
功能:该函数初始化一个用来进行base64编码的结构,事实上,该函数只是简单设置了结构里面几个常量的长度。
参数:
ctx:base64设备上下文。
Ø EVP_EncodeUpdate函数
原型:void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl,unsigned char *in,int inl);
功能:该函数将参数in里面的inl自己数据拷贝到结构体ctx里面,如果结构体里面有数据,就同时将结构体里面的数据进行BASE64编码并输出到参数out指向的缓存里面,输出数据的长度保存在outl里面。注意,在第一次调用本函数的时候,虽然往结构体里面拷贝数据了,但是结构体ctx里面开始是没有输入数据存在并且输入数据长度不超出ctx内部存储数据的最长限制,就不会有任何数据被进行BASE64编码,也就是说,不会有任何数据输出;但是如果输入数据长度比内部存储的数据长,那么就会输出部分经过BASE64编码的数据。数据输出总是在下一层输入前完成的。
参数:
ctx:base64设备上下文。
out:存放编码后的数据缓冲区。
outl:编码后的数据长度。
in:编码前的数据。
inl:编码前的数据长度。
Ø EVP_EncodeFinal函数
原型:void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl);
功能:该函数将结构体ctx里面剩余数据进行BASE64编码并写入到参数out里面去,输出数据的长度保存在outl里面。
参数:
ctx:base64设备上下文。
out:存放编码后的数据。
outl:编码后的数据长度。
Ø EVP_EncodeBlock函数
原型:int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);
功能:该函数将参数f里面的字符串里面的n个字节的字符串进行BASE64编码并输出到参数t里面。返回数据的字节长度。事实上,在函数EVP_EncodeUpdate和EVP_EncodeFinal里面就调用了该函数完成BASE64编码功能。
参数:
t:接收编码后的数据缓冲区。
f:编码前的数据。
n:编码前的数据长度。
原型:void EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
功能:该函数初始化一个用来进行BASE64解码的数据结构。
参数:
ctx:base64设备上下文。
Ø EVP_DecodeUpdate函数
原型:int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl,unsigned char *in, int inl);
功能:该函数将参数in里面inl字节的数据拷贝到结构体ctx里面。如果结构体里面已经有数据,那么这些数据就会先进行BASE64解码,然后输出到参数out指向的内存中,输出的字节数保存在参数outl里面。输入数据为满行的数据时,返回为1;如果输入数据是最后一行数据的时候,返回0;返回-1则表明出错了。
参数:
ctx:base64设备上下文。
out:存放解码后的数据缓冲区。
outl:解码后的数据长度。
in:解码前的数据。
inl:解码前的数据长度。
Ø EVP_DecodeFinal函数
原型:int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);
功能:该函数将结构体ctx里面剩余的数据进行BASE64解码并输出到参数out指向的内存中,输出数据长度为outl字节。成功返回1,否则返回-1。
参数:
ctx:base64设备上下文。
out:解码后的数据。
outl:解码后的数据长度。
Ø EVP_DecodeBlock函数
原型:int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
功能:该函数将字符串f中的n字节数据进行BASE64解码,并输出到t指向的内存中,输出数据长度为outl。成功返回解码的数据长度,返回返回-1。
参数:
t:接收解码后的数据缓冲区。
f:解码前的数据。
openssl base64 编、解码相关推荐
- 通过OpenSSL的接口实现Base64编解码
对openssl genrsa产生的rsa私钥pem文件,使用普通的base64解码会有问题,如使用https://blog.csdn.net/fengbingchun/article/details ...
- Java实现BASE64编解码
Java实现BASE64编解码 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs BASE64和其它类似的编码算法通经常使用于转换二进制数据为文本数据,其目 ...
- python 图片base64 编解码,转换成Opencv,PIL.Image图片格式
Python PIL.Image和OpenCV图像格式相互转换 二进制打开图片文件,base64编解码转成Opencv格式: # coding: utf-8 import base64 import ...
- Delphi 自带的 Base64 编解码函数
今天帮别人解决一个关于 Base64 编解码的问题,竟然发现 Delphi 自带了 Base64 编解码的单元,叫 EncdDecd,这名字很拗口而且不直观,估计这是一直很少人关注和知道的原因. 这个 ...
- Java 8实现BASE64编解码
Java 8实现BASE64编解码 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs Java一直缺少BASE64编码 API,以至于通常在项目开发中会选用 ...
- Notepad++插件Base64编解码
我们平常进行Base64编码需要自己写代码转换, 或者使用其他人编写的小工具程序, 也可以使用在线base64编码工具, 现在我们还可以使用Notepad++自带的插件, 进行Base64编码和解码, ...
- Python学习教程:Python3内置模块之base64编解码方法小结
Python学习教程:Python3内置模块之base64编解码方法小结 概述 Base64 是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64 就是一种基于 64 个可打印字符来 ...
- ubuntu下c++中base64编解码测试和图片编解码测试
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 字符数组的base64编解码 base64.h #include <string>std::string base64_encode(un ...
- MSDK手Q邀请透传参数问题:url编解码与base64编解码
最近做MSDK手Q的邀请功能,遇到一个坑,手Q结构化消息分享功能接口如下: /*** @param scene 标识发送手Q会话或者Qzone* eQQScene.QQScene_QZone: 分享到 ...
最新文章
- python模块之image修改图片类型
- 2020牛客多校第1场H-Minimum-cost Flow
- Flask 数据迁移 报错 Table 'xxx' is already defined for this MetaData instance
- Java调用Oracle存储Package
- VS集成Qt开发入门(简易时间显示)
- 2021年青海省大学生首届网络安全知识与技能大赛——赛题回顾及基本讲解
- bzoj 1704: [Usaco2007 Mar]Face The Right Way 自动转身机
- php如何架构设计,PHP – 架构设计帮助 – OOP固体原则
- python面试专题--with 关键字与上下文管理
- 计算机考研政治考哪些知识,带你了解408考研大纲,及21考研政治复习建议
- 小米 OJ 编程比赛 02 月常规赛 (Carryon 数数字)
- 一个简单的条码/二维码扫描App
- excel多个窗口独立显示_收藏!Excel快捷键
- ffmpeg将amr文件转成mp3文件
- 未来全世界油气的发展之路
- 3月4日 与柳传志面对面(谁是这个时代的思想家)
- adb命令删除offline离线手机设备
- 登录页面渗透测试思路总结
- 计算机科学期刊是ISTP吗,ISTP期刊是核心期刊吗
- TabLayout修改文字间距
热门文章
- ipad分屏怎么用_如何装备一个学术型的 iPad?
- 使用ActiveMovie控件制作多媒体播放器(支持MP3,WAV,dat,wma,mpeg,avi等)
- java客户咨询问题_对客户进行需求分析时,你会问哪些问题?请列举八个。
- python入门--第一天
- python 使用 selenium 爬虫知乎
- 辽宁启迪:开店手把手细心教学版
- 开发小程序(一)设置四宫格
- Arduino IDE 控制 RGB_LED 全彩灯(ESP8266示例)
- Android开发之 Wifi扫描分析
- HTML5笔记+案例