您的位置:首页 > 编程语言

12.openssl编程——BASE64编码介绍

2018-01-26 19:03 141 查看
12.1 BASE64编码介绍
BASE64编码是一种常用的将十六进制数据转换为可见字符编码。与ASCII码相比,它占用的空间较小。BASE64编码在rfc3548中定义。
 
12.2 BASE64编解码原理
将数据编码成BASE64编码时,以3字节数据为一组,转换为24bit的二进制,将24bit的二进制数据,得到一个数字:0-63。
 
Value Encoding  Value Encoding  Value Encoding  Value Encoding
          0 A          17 R           34 i            51 z
          1 B          18 S           35 j            52 0
          2 C          19 T           36 k            53 1
          3 D          20 U           37 l            54 2
          4 E          21 V           38 m           55 3
          5 F          22 W           39 n           56 4
          6 G         23 X           40 o            57 5
          7 H          24 Y           41 p            58 6
          8 I           25 Z           42 q            59 7
          9 J          26 a           43 r             60 8
         10 K         27 b           44 s             61 9
         11 L          28 c           45 t             62 +
         12 M         29 d           46 u            63 /
         13 N         30 e           47 v
         14 O          31 f           48 w         (pad) =
         15 P           32 g           49 x
         16 Q          33 h           50 y
比如有数据:0x30 0x82 0x02
编码过程如下:
a.得到16进制的数据:30 82 02
b.得到二进制数据: 00110000 10000010  00000010
c.每6bit分组: 001100 001000 001000 000010
d.得到数字:12 8 8 2
e.根据查表得到结果:MIIC
BASE64填充:在不够的情况下的右边加0.
 
有三种情况:
a.输入数据比特数是24的整数倍(输入字节为3字节正数倍),则无填充。
b.输入数据最后编码的是1个字节(输入数据字节数除3余1),即8比特,则需要填充2个"==",因为要补齐6比特,需要加2个00.
c.输入数据最后编码是2个字节(输入数据字节数除3余2),则需要填充1个"=",因为补齐6比特,需要加一个00
 
对0x30编码:
a.0x30的二进制位:00110000
b.分组为:001100 00
c.填充2个00: 001100 000000
d.得到数字:12 0
e.查表得到的编码MA,另外加上两个==
最终编码为:MA==
 
备注:base64解码是起编码过程的逆过程。解码时,将base64编码根据表展开,根据有几个等号去掉结尾几个00,然后每8比特恢复即可。
 
12.3 主要函数
openssl中用于base64编解码的函数主要有:
a.编码函数
EVP_EncodeInit 编码前初始化上下文
EVP_EncodeUpdate 进行BASE64编码,本函数可多次调用
EVP_EncodeFinal 进行BASE64编码,并输出结果
EVP_EncondeBlock 进行BASE64编码
 
b.解码函数
EVP_DecodeInit 解码前初始化上下文
EVP_DecodeUpdate BASE64解码,本函数可多次调用
EVP_DecodeFinal BASE64解码,并输出结果
EVP_DecodeBlock BASE64解码,可单独调用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: