2021SC@SDUSC openssl gpu BASE64编解码

2021SC@SDUSC
2 BASE64编解码
12.1 BASE64编码介绍

BASE64编码是一种常用的将十六进制数据转换为可见字符的编码。
与ASCII码相比,它占用的空间较小。BASE64编码在rfc3548中定义。

12.2 BASE64编解码原理

将数据编码成BASE64编码时,以3字节数据为一组,转换为24bit的二进制数,
将24bit的二进制数分成四组,每组6bit。
对于每一组,得到一个数字:0-63。然后根据这个数字查表即得到结果。

表如下:

在这里插入图片描述

   比如有数据:0x30 0x82 0x02
   编码过程如下:
       1)得到16进制数据: 30 82 02
       2)得到二进制数据: 00110000              10000010       00000010
       3)每6bit分组:       001100    001000    001000    000010
       4)得到数字:            12   8     8     2
       5)根据查表得到结果 : M I I C
   BASE64填充:在不够的情况下在右边加0。
   有三种情况:
       1)  输入数据比特数是24的整数倍(输入字节为3字节整数倍),则无填充;
       2)  输入数据最后编码的是1个字节(输入数据字节数除3余1),即8比特,则需要填充2个"==",
           因为要补齐6比特,需要加2个00;
       3)  输入数据最后编码是2个字节(输入数据字节数除3余2),
           则需要填充1个"=",因为补齐6比特,需要加一个00。

   举例如下:
   对0x30编码:
       1)    0x30的二进制为:00110000
       2)    分组为:001100    00
       3)    填充2个00:001100   000000
       4)    得到数字:12 0
       5)    查表得到的编码为MA,另外加上两个==
   所以最终编码为:MA==

   base64解码是其编码过程的逆过程。
   解码时,将base64编码根据表展开,根据有几个等号去掉结尾的几个00,
   然后每8比特恢复即可。

12.3 BASE64编解码原理

Openssl中用于base64编解码的函数主要有:

1)编码函数

   EVP_EncodeInit

   编码前初始化上下文。

   EVP_EncodeUpdate

   进行BASE64编码,本函数可多次调用。

   EVP_EncodeFinal

   进行BASE64编码,并输出结果。

   EVP_EncodeBlock

   进行BASE64编码。
  1. 解码函数

    EVP_DecodeInit

    解码前初始化上下文。

    EVP_DecodeUpdate

    BASE64解码,本函数可多次调用。

    EVP_DecodeFinal

    BASE64解码,并输出结果。

    EVP_DecodeBlock

    BASE64解码,可单独调用。

12.4 编程示例
示例1

#include <string.h>
#include <openssl/evp.h>
int main()
{
   
	EVP_ENCODE_CTX  *ectx = NULL,*dctx = NULL;
	ectx = EVP_ENCODE_CTX_new(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值