OpenSS L Base64编码和解码
一、编码解码、函数介绍:
编码函数:
EVP_En codeI nit函数
原型:void EVP_En codeI nit(EVP_EN CODE_CTX *ctx);
功能:该函数初始化一个用来进行base64编码的结构,事实上,该函数只是简单设置了结构里面几个常量的长度。
参数:
ctx:base64设备上下文。
EVP_En codeU pdate函数
原型:void EVP_En codeU pdate(EVP_EN CODE_CTX *ctx,unsign ed char *out,int *outl,unsign ed char *in,int inl);
功能:
该函数将参数i n里面的i nl自己数据拷贝到结构体ct x里面,如果结构体里面有数据,就同时将结构体里面的数据进行BASE64编码并输出到参数out指向的缓存里面,输出数据的长度保存在o u tl里面。注意,在第一次调用本函数的时候,虽然往结构体里面拷贝数据了,但是结构体c t x里面开始是没有输入数据存在并且输入数据长度不超出ctx内部存储数据的最长限制,就不会有任何数据被进行BASE64编码,也就是说,不会有任何数据输出;但是如果输入数据长度比内部存储的数据长,那么就会输出部分经过B ASE64编码的数据。数据输出总是在下一层输入前完成的。
参数:
ctx:base64设备上下文。
out:存放编码后的数据缓冲区。
outl:编码后的数据长度。
in:编码前的数据。
inl:编码前的数据长度。
EVP_En codeF inal函数
原型:void EVP_En codeF inal(EVP_EN CODE_CTX *ctx,unsign ed char *out,int *outl);
功能:该函数将结构体ctx里面剩余数据进行BAS E64编码并写入到参数out里面去,输出数据的长度保存在o u tl里面。
参数:
ctx:base64设备上下文。
out:存放编码后的数据。
outl:编码后的数据长度。
EVP_En codeB lock函数
原型:int EVP_En codeB lock(unsign ed char *t, constunsign ed char *f, int n);
功能:该函数将参数f里面的字符串里面的n个字节的字符串进行B ASE64编码并输出到参数t里面。返回数据的字节长度。事实上,在函数EV
P_Enco deUpd ate和E VP_En codeF inal里面就调用了该函数完成B ASE64编码功能。
参数:
t:接收编码后的数据缓冲区。
f:编码前的数据。
n:编码前的数据长度。
解码函数:
EVP_De codeI nit函数
原型:void EVP_De codeI nit(EVP_EN CODE_CTX *ctx);
功能:该函数初始化一个用来进行BASE64解码的数据结构。
参数:
ctx:base64设备上下文。
EVP_De codeU pdate函数
原型:int EVP_De codeU pdate(EVP_EN CODE_CTX *ctx,unsign ed char *out,int *outl,unsign ed char *in, int inl);
功能:该函数将参数i n里面inl字节的数据拷贝到结构体ctx里面。如果结构体里面已经有数据,那么这些数据就会先进行BASE64解码,然后输出到参数out指向的内存中,输出的字节数保存在参数o utl里面。输入数据为满行的数据时,返回为1;如果输入数据是最后一行数据的时候,返回0;返回-1则表明出错了。
参数:
ctx:base64设备上下文。
out:存放解码后的数据缓冲区。
outl:解码后的数据长度。
in:解码前的数据。
inl:解码前的数据长度。
EVP_De codeF inal函数
原型:int EVP_De codeF inal(EVP_EN CODE_CTX *ctx, unsign ed char *out, int *outl);
功能:该函数将结构体ctx里面剩余的数据进行BASE64解码并输出到参数out指向的内存中,输出数据长度为outl字节。成功返回1,否则返回-1。
参数:
ctx:base64设备上下文。
out:解码后的数据。
outl:解码后的数据长度。
EVP_De codeB lock函数
原型:int EVP_De codeB lock(unsign ed char *t, constunsign ed char *f, int n);
功能:该函数将字符串f中的n字节数据进行BASE64解码,并输出到t指向的内存中,输出数据长度为outl。成功返回解码的数据长度,返回返回-1。
参数:
t:接收解码后的数据缓冲区。
f:解码前的数据。
n:解码前的数据长度。
二、数据结构:
这些函数声明对应声明在头文件 /usr/includ e/openss l/evp.h 中。三、B ase64编码实现
(1)定义一些必要的变量:
EVP_EN CODE_CTX ctx; //EVP编码结构体
unsign ed char in[1024]; //输入数据缓冲区
int inl; //输入数据长度
fopen和open区别char out[2048]={0}; //输出数据缓冲区
int outl; //输出数据长度
FILE *infp; //输入文件句柄
FILE *outfp;//输出文件句柄
(2)使用EVP_Encod eInit函数初始化编码结构体E VP_ENCODE_CTXEVP_En codeI nit(&ctx);
(3)使用EVP_Encod eUpda te函数对数据进行编码,对大数据段可以循环调用。输入待编码的数据,输出编码后的数据。
EVP_En codeU pdate(&ctx,out,&outl,in,inl);
(4)使用EVP_Encod eFina l编码结束,输出最后剩余的编码数据。EVP_En codeF inal(&ctx,out,&outl);
四、B ase64解码实现:
(1)定义一些必要的变量:
EVP_EN CODE_CTX ctx; //EVP编码结构体
char in[1024]; //输入数据缓冲区
int inl; //输入数据长度
unsign ed char out[1024]; //输出数据缓冲区
int outl; //输出数据长度
FILE *infp; //输入文件句柄
FILE *outfp;//输出文件句柄
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论