VC中BASE64编码和解码使用详解

2020-01-06 13:59:03丽君

Base64是一种很常用的编码方式,利用它可以将任何二进制的字符编码到可打印的64个字符之中, 这样,不管是图片,中文文本等都可以编码成只有ASCII的纯文本。

BASE64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本。完整的BASE64定义可见 RFC1421和 RFC2045。编码后的数据比原始数据略长,为原来的4/3。在电子邮件中,根据RFC822规定,每76个字符,还需要加上一个回车换行。

转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。数据不足3byte的话,于缓冲区中剩下的Bit用0补足。然后,每次取出6个bit,按照其值选择ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作为编码后的输出。不断进行,直到全部输入数据转换完成。如果最后剩下两个输入数据,在编码结果后加1个“=”;如果最后剩下一个输入数据,编码结果后加2个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。

BASE64_API.h 文件内容

 

 
  1. /* ----------------------------------------------------------  文件名称:BASE64_API.h 
  2.   作者:秦建辉 
  3.   MSN:splashcn@msn.com 
  4.   当前版本:V1.1 
  5.   历史版本: 
  6. V1.1 2010年05月11日  修正BASE64解码的Bug。 
  7.   V1.0 2010年05月07日 
  8. 完成正式版本。   
  9. 功能描述:  BASE64编码和解码 
  10.   接口函数: 
  11. Base64_Encode  Base64_Decode 
  12.   说明: 
  13. 1. 参考openssl-1.0.0。  2. 改进接口,以使其适应TCHAR字符串。 
  14. 3. 修正EVP_DecodeBlock函数解码时未去掉填充字节的缺陷。  ------------------------------------------------------------ */ 
  15. #pragma once  #include "stdafx.h" 
  16.   #include <windows.h> 
  17.   #ifdef __cplusplus 
  18. extern "C" {  #endif 
  19.   /* 
  20. 功能:将二进制数据转换成BASE64编码字符串  参数说明: 
  21. inputBuffer:要编码的二进制数据  inputCount:数据长度 
  22. outputBuffer:存储转换后的BASE64编码字符串  返回值: