第十章opensslbase64编码和解码
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10.1 函数介绍
Openssl进行 进行Base64解码的函数有: 解码的函数有: 进行 解码的函数有 • EVP_DecodeInit • EVP_DecodeUpdate • EVP_DecodeFinal • EVP_DecodeBlock 其中EVP_DecodeInit、EVP_DecodeUpdate 其中 、 EVP_DecodeFinal、适用于处理不定长的大数 、 用于处理短数据。 据,EVP_EncodeBlock用于处理短数据。 用于处理短数据
10.1 函数介绍
Openssl进行 进行Base64编码的函数有: 编码的函数有: 进行 编码的函数有 • EVP_EncodeInit • EVP_EncodeUpdate • EVP_EncodeFinal • EVP_EncodeBlock 其中EVP_EncodeInit、EVP_EncodeUpdate、 其中 、 、 EVP_EncodeFinal适用于处理不定长的大数据, 适用于处理不定长的大数据, 适用于处理不定长的大数据 EVP_EncodeBlock用于处理短数据。 用于处理短数据。 用于处理短数据
流程分析: 流程分析: 对于小量数据的编解码直接调用 EVP_EncodeBlock和EVP_DecodeBlock函数 和 函数 即可。 即可。
2、 Base64解码实现 、 解码实现 1)定义一些必要的变量,包括evp编码结构体、输入数据缓冲区、 )定义一些必要的变量,包括 编码结构体、 编码结构体 输入数据缓冲区、 输出数据缓冲区等。 输出数据缓冲区等。 2)使用EVP_DecodeInit函数初始化编码结构体 )使用 函数初始化编码结构体 EVP_ENCODE_CTX. 3)使用EVP_DecodeUpdate函数对数据进行解码,对大数据段 )使用 函数对数据进行解码, 函数对数据进行解码 可以循环调用。 可以循环调用。 4)使用EVP_DecodeFinal编码结束。 )使用 编码结束。 编码结束
第十章 openssl base64 编码和解码
• Openssl 在evp.h中提供了 中提供了base64的编码 中提供了 的编码 和解码的函数。 和解码的函数。 Base64编码就是把二进制 编码就是把二进制 数据转换为可见的ASCⅡ字符。 Base64解 数据转换为可见的 Ⅱ字符。 解 码是相反的过程。 码是相反的过程。 Base64编码后的数据方 编码后的数据方 便在web中传输以及可视化的复制和粘贴。 便在 中传输以及可视化的复制和粘贴。 中传输以及可视化的复制和粘贴 同时广泛应用的电子邮件协议也是通过 Base64编码进行数据传输的。 编码进行数据传输的。 编码进行数据传输的
10.2.7Base64解码函数 解码函数 EVP_DecodeUpdate
函数功能:进行Base64数据解码,对于大数据可以重复调用。大数据 函数功能:进行 数据解码,对于大数据可以重复调用。 数据解码 为不定长数据或数据量非常长。由于数据不定长或非常长, 为不定长数据或数据量非常长。由于数据不定长或非常长,不适合分 配定长的内存来保存, 配定长的内存来保存,故需要每次处理一小部分重复调用直到数据处 理完毕为止。 理完毕为止。 函数定义: 函数定义: Int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx,unsigned , char*out,int *out1,const unsigned char *in,int in1); , , , 参数说明: 参数说明: ctx:[in] EVP_ENCODE_CTX结构体,表示上下文变量。 结构体, : 结构体 表示上下文变量。 Out:表示解码后的数据。 :表示解码后的数据。 Out1:表示解码后的数据长度。 :表示解码后的数据长度。 In:const unsigned char *类型数据,表示带解码的数据。 类型数据, : 类型数据 表示带解码的数据。 In1:表示解码数据的长度 : 返回值: 返回值:无。
10.1.2 Base64编码函数 编码函数 EVP_EncodeUpdate
函数功能:进行 数据编码, 函数功能:进行Base64数据编码,对于大数据可以重复调用。 数据编码 对于大数据可以重复调用。 函数定义: 函数定义: Int EVP_EncodeUpdate(EVP_Encode_CTX *ctx, , unsigned char*out,int *out1,const unsigned char *in, , , , int in1); 参数说明: 参数说明: Ctx:[in] EVP_Encode_CTX结构体,表示上下文变量。 结构体, : 结构体 表示上下文变量。 Type:[in]const EVP_MD*类型数据,表示计算摘要使用的 类型数据, : 类型数据 算法。 算法。 Impl:[in]ENGINE*类型数据,表示摘要算法使用引擎。应用 类型数据, : 类型数据 表示摘要算法使用引擎。 程序可以使用自定义的算法引擎,如硬件和摘要算法等, 程序可以使用自定义的算法引擎,如硬件和摘要算法等,如 果此参数为null,则使用默认引擎。 果此参数为 ,则使用默认引擎。
10.3 实例应用
了解了Base64编解码的主要函数后,下面通 编解码的主要函数后, 了解了 编解码的主要函数后 过一个实例来说明这些函数的用法。 过一个实例来说明这些函数的用法。 Base64函数主要用于实现二进制数据和可 函数主要用于实现二进制数据和可 见字符数据的转换。 见字符数据的转换。
流程分析: 流程分析: Base64编码就是把二进制数据转换为可见字符, 编码就是把二进制数据转换为可见字符, 编码就是把二进制数据转换为可见字符 Base64解码则是相反的过程,即把可见得 解码则是相反的过程, 解码则是相反的过程 即把可见得Base64编码字 编码字 符转换为二进制数据。编程实现对数据的Base64编解码 符转换为二进制数据。编程实现对数据的 编解码 的基本步骤如下。 的基本步骤如下。
10.2.4编码函数 编码函数EVP_EncodeBlock 编码函数
函数功能:进行 数据编码, 函数功能:进行Base64数据编码,适用于小量数据。 数据编码 适用于小量数据。 函数定义: 函数定义: Int EVP_EncodeBlock(unsigned char *t,const , unsigned char *f,int n); , 参数说明: 参数说明: t:[out] unsigned char *类型数据,表示编码后的 类型数据, : 类型数据 数据。 数据。 f:[in]const unsigned char*类型数据,表示待编 类型数据, : 类型数据 码的数据。 码的数据。 n:[in] int类型数据,表示待编码数据的长度。 类型数据, : 类型数据 表示待编码数据的长度。 返回值:编码后的数据长度。 返回值:编码后的数据长度。
10.2.5Base64解码函数 解码函数 EVP_DecodeBlock
函数功能:进行 数据解码, 函数功能:进行Base64数据解码,适用于小量的数据。 数据解码 适用于小量的数据。 函数定义: 函数定义: Int EVP_DecodeBlock(unsigned char *t,const unsigned char *f,int n); , 参数说明: 参数说明: t:[out] unsigned char*类型数据,表示解码后的数据。 类型数据, : 类型数据 表示解码后的数据。 f:[in]const unsigned char*类型数据,表示待解码的数据。 类型数据, 类型数据 表示待解码的数据。 n:[in] int类型数据,表示待解码数据的长度。 类型数据, : 类型数据 表示待解码数据的长度。 返回值:解码后的数据长度。 返回值:解码后的数据长度。
10.2.8Base64解码结束函数 解码结束函数 EVP_DecodeFinal
函数功能:解码结束,输出剩余的解码数据。 函数功能:解码结束,输出剩余的解码数据。 函数定义: 函数定义: Int EVP_DecodeFinal(EVP_ENCODE_CTX, , unsigned char *out,int *out1); , 参数说明: 参数说明: ctx:[in] EVP_ENCODE_CTX类型数据,表示上 类型数据, : 类型数据 下文变量。 下文变量。 out:[out] unsigned char*类型数据,表示解码后 类型数据, 类型数据 的数据。 的数据。 out1:[out] int*类型数据,表示解码后的数据长度。 类型数据, : 类型数据 表示解码后的数据长度。 返回值: 返回值:无。
10.2.6Base64解码初始化函数 解码初始化函数 EVP_DecodeInit
函数功能: 函数功能:初始化一个用于解码的 EVP_ENCODE_CTX结构体。只有调用该函数初 结构体。 结构体 始化后, 始化后, EVP_ENCODE_CTX结构体才能在其 结构体才能在其 它函数中调用。 它函数中调用。 函数定义: 函数定义: void EVP_DecodeInit (EVP_ENCODE_CTX *ctx); 参数说明: 参数说明: ctx:[in] EVP_ENCODE_CTX结构体。 结构体。 : 结构体 返回值: 返回值:无。
10.2.3 Base64编码结束函数 编码结束函数 EVP_EncodeFinal
函数功能:编码结束,输出最后剩余的编码数据。 函数功能:编码结束,输出最后剩余的编码数据。 函数定义: 函数定义: Viod EVP_EncodeFinal(EVP_Encode_CTX *ctx,unsigned char *out,int *out1); 参数说明: 参数说明: Ctx:[in] EVP_MD_CTX结构体,用来保存计算摘要时的上 结构体, : 结构体 下文环境,如设置的摘要算法、当前已经计算的状态等。 下文环境,如设置的摘要算法、当前已经计算的状态等。 out:[in]unsigned char*类型数据,表示编码后的数据。 类型数据, : 类型数据 表示编码后的数据。 out1:[out] int * 类型数据,表示编码后的数据长度。 类型数据,表示编码后的数据长度。 : 无返回值
1、 Base64编码实现 编码实现 1)定义一些必要的变量,包括evp编码结构体、输入数据缓冲区、 )定义一些必要的变量,包括 编码结构体、 编码结构体 输入数据缓冲区、 输出数据缓冲区等。 输出数据缓冲区等。 2)使用EVP_EncodeInit函数初始化编码结构体 )使用 函数初始化编码结构体 EVP_ENCODE_CTX. 3)使用EVP_EncodeUpdate函数对数据进行编码,对大数据段 )使用 函数对数据进行编码, 函数对数据进行编码 可以循环调用。输入待编码数据,输出编码后的数据。 可以循环调用。输入待编码数据,输出编码后的数据。 4)使用EVP_EncodeFinal编码结束,输出最后剩余的编码数据。 )使用 编码结束, 编码结束 输出最后剩余的编码数据。
10.1.1初始化函数 初始化函数 EVP_EncodeInit
函数功能:初始化一个 ຫໍສະໝຸດ 构体。 函数功能:初始化一个EVP_Encode_CTX结构体。只有 结构体 调用该函数初始化后, 调用该函数初始化后, EVP_Encode_CTX结构体才能在 结构体才能在 其他函数中调用。 其他函数中调用。 函数定义: 函数定义: Void EVP_EncodeInit (EVP_Encode_CTX *ctx); 参数说明: 参数说明: Ctx:[in] EVP_MD_CTX结构体,用来保存Base64 编 : 结构体, 结构体 码的中间状态。 码的中间状态。 无返回值。 无返回值。