Base64编码及代码

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

  

1、base64编解码原理

      关于这个编码的规则:

    1)把3个字符变成4个字符

  2)每76个字符加一个换行符

  3)最后的结束符也要处理

       

  将数据编码成BASE64编码时,3字符转4字符后,每个字符6bit,得到一个数字:0-63。但是由于0-63中有很多不可打印字符,需要进行二次映射,映射的规则就是

      0~25:A~Z

      26~51:a~z

      52~61:0~9

      62:+

      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==

2、Base64编解码,下面代码参考开源软件cyassl:

猜你喜欢

转载自blog.csdn.net/sealyao/article/details/5863716