Advertisement
cos8o

Base64 Library

Apr 25th, 2018
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.53 KB | None | 0 0
  1. #include <string>
  2.  
  3. std::string dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  4.  
  5. std::string Base64EncodeString(const unsigned char *Buffer, int Length)
  6. {
  7.     std::string result;
  8.     for (int i = 0; i < Length; i += 3)
  9.     {
  10.         result += dict[Buffer[i] >> 2];
  11.         if (i == Length - 1)
  12.         {
  13.             result += dict[((Buffer[i] & 0x03) << 4)];
  14.             result += "==";
  15.         }
  16.         else if (i == Length - 2)
  17.         {
  18.             result += dict[(Buffer[i] << 4) | (Buffer[i + 1] >> 4)];
  19.             result += dict[(Buffer[i + 1] & 0x03) << 2];
  20.             result += "=";
  21.         }
  22.         else
  23.         {
  24.             result += dict[(Buffer[i] << 4) | (Buffer[i + 1] & 0xF0) >> 4];
  25.             result += dict[(Buffer[i + 1] & 0x0F << 2) | (Buffer[i + 2] & 0xC0) >> 6];
  26.             result += dict[Buffer[i + 2] & 0x3F];
  27.         }
  28.     }
  29.     return result;
  30. }
  31.  
  32. std::string Base64DecodeString(const std::string& Buffer)
  33. {
  34.     std::string result;
  35.  
  36.     for (int i = 0; i < Buffer.size(); i += 4)
  37.     {
  38.         if (dict.find(Buffer[i]) == std::string::npos ||
  39.             dict.find(Buffer[i + 1]) == std::string::npos ||
  40.             dict.find(Buffer[i + 2]) == std::string::npos ||
  41.             dict.find(Buffer[i + 3]) == std::string::npos)
  42.             return nullptr;
  43.  
  44.         result += dict.find(Buffer[i]) << 2 | (dict.find(Buffer[i + 1]) & 0x30) >> 4;
  45.  
  46.         if (Buffer[i + 2] != '=')
  47.         {
  48.             result += ((dict.find(Buffer[i + 1]) & 0x0F) << 4 | (dict.find(Buffer[i + 2]) & 0x3C) >> 2);
  49.             result += ((dict.find(Buffer[i + 2]) & 0x03) << 6) | dict.find(Buffer[i + 3]) - (i == Buffer.size() - 4 && Buffer[i + 3] == '=' ? dict.find(Buffer[i + 3]) : 0);
  50.         }
  51.     }
  52.     return result;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement