AntonioVillanueva

Base64 class c++

Aug 13th, 2024
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <iomanip>
  6. #include <sstream>
  7. #include <cstring>
  8.  
  9. using namespace std;
  10. class Base64Decoder {
  11. private:
  12.     static constexpr const char* base64_chars =
  13.         "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  14.         "abcdefghijklmnopqrstuvwxyz"
  15.         "0123456789+/";
  16.  
  17. public:
  18.  
  19.     static std::string base64_to_hex(const std::string& base64_input) {
  20.         std::vector<unsigned char> decoded_bytes;
  21.         int val = 0, valb = -8;
  22.        
  23.         for (unsigned char c : base64_input) {
  24.             if (c == '=') break;
  25.             const char* pos = std::strchr(base64_chars, c);
  26.             if (pos == nullptr) continue; // Ignorar caracteres no válidos
  27.             val = (val << 6) + (pos - base64_chars);
  28.             valb += 6;
  29.             if (valb >= 0) {
  30.                 decoded_bytes.push_back(char((val >> valb) & 0xFF));
  31.                 valb -= 8;
  32.             }
  33.         }
  34.  
  35.         std::stringstream hex_stream;
  36.         hex_stream << std::hex << std::setfill('0');
  37.         for (unsigned char byte : decoded_bytes) {
  38.             hex_stream << std::setw(2) << static_cast<int>(byte);
  39.         }
  40.  
  41.         return hex_stream.str();
  42.     }  
  43.    
  44.     // conversion  chaîne hexadécimale en base64  p.e '060200000000' ->BgIAAAAA
  45.     // Fonction pour convertir une chaîne hexadécimale en  vector bytes
  46.     std::vector<uint8_t> hex_string_to_vector(const std::string& hex_string) {
  47.         std::vector<uint8_t> bytes;
  48.        
  49.         for (size_t i = 0; i < hex_string.length(); i += 2) {
  50.             std::string byteString = hex_string.substr(i, 2);
  51.             uint8_t byte = (uint8_t) std::stoi(byteString, nullptr, 16);
  52.             bytes.push_back(byte);
  53.         }
  54.        
  55.         return bytes;
  56.     }  
  57. };
  58.  
  59.  
  60.  
  61. int main() {
  62.     //Lire entree Base64
  63.     /*
  64.     std::string base64_input;
  65.     std::cout << "Entrez la chaîne Base64: ";
  66.     std::cin >> base64_input;
  67.     */
  68.     string base64_input="BQAA";
  69.    
  70.     Base64Decoder base64;//Instance Base64Decoder
  71.     string hex_string = base64. base64_to_hex(base64_input);//Base64 to HexString
  72.    
  73.     cout <<base64_input<<" : "<<hex_string<<endl;//Debug
  74.    
  75.     //Création d'un vecteur hexadécimal uint_8
  76.     std::vector<uint8_t> vector_hex;
  77.     vector_hex =base64.hex_string_to_vector(hex_string);//Conversion string hex to vector uint_8
  78.    
  79.     for (uint8_t const & elem:vector_hex){
  80.         cout << "-> 0x" << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(elem) << std::dec << endl;
  81.     }
  82.  
  83.     return 0;
  84. }
  85.  
Add Comment
Please, Sign In to add comment