base64编码原理:

   采用64个基本的ASCII码字符对数据进行重新编码,它将需要编码的数据拆成字节数,以三个为一族,按照顺序排列24位数据,再把这24位数据分成4组,每组6位,再在每组的最高位补2个0凑足一个字节,如所需的编码数据的字节数不是3的整数,也就是说在分组时最后一组不够3个字节的,在最后一组填充1-2个0字节,并在最后编码完成之后在结尾添加1-2个'='

  实现源代码如下

 
  
  1. static const char cb64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  2. void base64encode(char*out,const unsigned char* in,int len) 
  3.     for(;len >= 3; len -= 3) 
  4.     { 
  5.         *out++ = cb64[in[0]>>2]; 
  6.         *out++ = cb64[((in[0]&0x03)<<4)|(in[1]>>4)]; 
  7.         *out++ = cb64[((in[1]&0x0f)<<2)|((in[2]&0xc0)>>6)]; 
  8.         *out++ = cb64[in[2]&0x3f]; 
  9.         in += 3; 
  10.     } 
  11.     if(len > 0) 
  12.     { 
  13.         unsigned char fragment; 
  14.         fragment = (in[0]&0x03)<<4 ; 
  15.         if(len > 1) 
  16.             fragment |= in[1]>>4; 
  17.         *out++ = cb64[in[0]>>2]; 
  18.         *out++ = cb64[fragment]; 
  19.         *out++ = (len < 2)? '=' : cb64[(in[1]&0x0f)<<2]; 
  20.         *out++ = '='
  21.     } 
  22.     *out = '\0'