Base64编码解码

what is base64 coding and decoding is in reference to

https://en.wikipedia.org/wiki/Base64
http://www.cnblogs.com/chengxiaohui/articles/3951129.html

//sample code in c++. Please note that the code needs refinements as there is some warning in some analysis tools,e.g. pc-lint, Coverity etc.

// it is just a sample code for study.

//declaration in header

std::string base64Encode(const std::vector<char>& byteData);
std::vector<char> base64Decode(std::string & const inputString);

//implemenation

std::string Cbase64Dlg::base64Encode(const std::vector<char>& byteData)
{
   const std::string codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
   std::string base64String;
   int b;
   for (size_t i = 0; i < byteData.size(); i = i+3)
   {
      b = (byteData[i] & 0xFC) >> 2;
      base64String.push_back(codes[b]);
      b = (byteData[i] & 0x03) << 4;
      if (i + 1 < byteData.size())
      {
         b |= (byteData[i + 1] & 0xF0) >> 4;
         base64String.push_back(codes[b]);
         b = (byteData[i + 1] & 0x0F) << 2;
         if (i+2 < byteData.size())
         {
            b |= (byteData[i + 2] & 0xC0) >> 6;
            base64String.push_back(codes[b]);
            b = byteData[i + 2] & 0x3F;
            base64String.push_back(codes[b]);
         }
         else
         {
            base64String.push_back(codes[b]);
            base64String.append("=");
         }
      }
      else
      {
         base64String.push_back(codes[b]);
         base64String.append("==");
      }
   }
   
   return base64String;
}

std::vector<char> Cbase64Dlg::base64Decode(std::string & const inputString)
{   
   static std::string codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
   std::vector<char> decoded;

if (inputString.length() % 4 != 0)    
   {
      return std::vector<char>();
   }

//The ratio of output bytes to input bytes is 4:3
   int outLen = (inputString.length() * 3 / 4);

size_t pos = inputString.find_first_of(‘=‘);
   if (pos != std::string::npos)
   {
      decoded.resize(outLen - (inputString.length() - pos));
   }
   else
   {
      decoded.resize(outLen);
   }

int j = 0;
   int b[4] = {};

const char* p = inputString.c_str();

while(p && *p && j < outLen)
   {
      bool valid = false;
      for (int i=0; p && i < 4; ++i)
      {
         size_t pos = codes.find_first_of(*p++);
         if ( pos != std::string::npos)
         {
            b[i] = pos;
         }
      }

if (j < outLen)
      {
         decoded[j++] = (byte) ((b[0] << 2) | (b[1] >> 4));;
         if (j < outLen && b[2] < 64)      
         {
            decoded[j++] = (byte) ((b[1] << 4) | (b[2] >> 2));

if (j < outLen && b[3] < 64)  
            {
               decoded[j++] = (byte) ((b[2] << 6) | b[3]);
            }
         }
      }
   }

return decoded;
}

// test code

char myints[] = "ABC&&&&&&&&&&";
   std::vector<char> byte (myints, myints + sizeof(myints) / sizeof(char) );
   std::string value = base64Encode(byte);
   std::cout << value << std::endl;
   std::vector<char>decode = base64Decode(value);

时间: 2024-10-01 07:41:00

Base64编码解码的相关文章

[C语言]Base64编码解码

Base64编码解码 一,Base64编码原理 Base64编码的字符数组如下所示 : ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ 字符串转Base64编码:取3字节的字符串转换为四字节的字符串,依次往后转换.得到Base64编码字符串.具体原理如下: 1,如果需要编码的原串字节数刚好为3的倍数,那么转换规则如下: 以中文字符'严'为例,'严'字的UTF-8编码为:0xE4B8A5 = 11100100  10

Atitit.&#160;二进制数据ascii表示法,与base64编码解码api&#160;设计标准化总结java&#160;php&#160;c#.net

Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net 1. Base64编码,1 1.1. 子模式 urlsafe Or  url unsafe2 1.2. 其他的二进制数据表示法  bin2hex() ,Quoted-printable ,UUencode2 2. Base64常用api2 2.1. ------------解码api2 2.2. decode(String s, OutputStream out)2 2.3. 

Base64编码解码算法

Base64不是什么新奇的算法了,不过如果你没从事过页面开发(或者说动态页面开发,尤其是邮箱服务),你都不怎么了解过,只是听起来很熟悉. 对于黑客来说,Base64与MD5算法有着同样的位置,因为电子邮箱(e-mail)正文就是base64编码的. 那么,我们就一起来深入的探讨一下这个东东吧. 对于一种算法,与其问"它是什么?",不如问"它实现了什么?" Base64实现了:将任意字节转为可读字符的编码. 我们知道,除了页面上的文本,计算机中的数据还有很多是不可见的

OpenSSL 使用 base64 编码/解码(liang19890820)

关于 OpenSSL 的介绍及安装请参见:Windows 下编译 OpenSSL 下面主要介绍有关 OpenSSL 使用 base64 编码/解码. 简述 编码解码 更多参考 编码/解码 #include <openssl/evp.h> #include <openssl/bio.h> #include <openssl/buffer.h> #include <string> #include <iostream> using namespace

java对文件的二进制流base64编码解码

1.java对文件的二进制流base64编码解码 一般保存文件的时候选择的方式是将url存进数据库.今天遇到一个对接传文件流的二进制base64编码,简单记录一下. 依赖于commons-io包和commons-codec包. 编码的方法如下: public static String encodeFile(File file) throws IOException { byte[] readFileToByteArray = FileUtils.readFileToByteArray(file

Android Base64编码解码

服务端图片的信息被转化成字符串,传到android客户端,android端需要把这些信息再解码转化成图片并保存在本地. //编码部分 String string = Base64.encodeToString(str.getBytes(),Base64.DEFAULT); //解码部分string 是服务端发来的信息 byte[] byteIcon= Base64.decode(string,Base64.DEFAULT); for (int i = 0; i < byteIcon.length

Javascript中Base64编码解码的使用实例

Javascript为我们提供了一个简单的方法来实现字符串的Base64编码和解码,分别是window.btoa()函数和window.atob()函数. 例如: 1 2 var encodedStr = window.btoa("Hello world"); //字符串编码 var decodedStr = window.atob(encodedStr); //字符串解码

C# base64 编码 解码

编码: byte[] bytes=Encoding.Default.GetBytes("要转换的字符串"); Convert.ToBase64String(bytes); 解码: //"ztKwrsTj"是"我爱你"的base64编码 byte[] outputb = Convert.FromBase64String("ztKwrsTj");    string orgStr= Encoding.Default.GetStri

Base64编码解码原理

一.编码规则 Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码.它将需要编码的数据拆分成字节 数组.以3个字节为一组.按顺序排列24 位数据,再把这24位数据分成4组,即每组6位.再在每组的的最高位前 补两个0凑足一个字节.这样就把一个3字节为一组的数据重新编码成了4个字节.当所要编码的数据的字节数不是 3的整倍数,也就是说在分组时最后一组不够3个字节.这时在最后一组填充1到2个0字节.并在最后编码完成后在 结尾添加1到2个 "=". 例:将对ABC进行BA

JS实现—Base64编码解码,带16进制显示

代码如下: <!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <titl