AntonioVillanueva

Encodage et de décodage Base64 <-> Hex

Jun 4th, 2024
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.34 KB | Software | 0 0
  1. /* Antonio Villanueva Segura
  2.  * Fonctions d'encodage et de décodage  Base64 <->  Hex base sur boost
  3.  * g++ -o decode_base64 decode_base64.cpp -lboost_system
  4.  */
  5. //g++ -o base64 base64.cpp -lboost_system
  6. #include <iostream>
  7. #include <string>
  8. #include <vector>
  9. //Hex Base64
  10. #include <boost/algorithm/hex.hpp>
  11. #include <boost/beast/core/detail/base64.hpp>
  12.  
  13. using namespace std;//std::
  14.  
  15.  
  16. // conversion  chaîne hexadécimale en base64  p.e '060200000000' ->BgIAAAAA
  17. // Fonction pour convertir une chaîne hexadécimale en bytes
  18. std::vector<unsigned char> hex_to_bytes(const std::string& hex) {
  19.     std::vector<unsigned char> bytes;
  20.     boost::algorithm::unhex(hex.begin(), hex.end(), std::back_inserter(bytes));
  21.     return bytes;
  22. }
  23.  
  24. // Fonction pour encoder des octets en Base64, retourne string
  25. std::string base64_encode(const std::vector<unsigned char>& bytes) {
  26.     std::string base64;
  27.     base64.resize(boost::beast::detail::base64::encoded_size(bytes.size()));
  28.     base64.resize(boost::beast::detail::base64::encode(
  29.         &base64[0], bytes.data(), bytes.size()));
  30.     return base64;
  31. }
  32.  
  33. //Décode Base64 en un système hexadécimal mais type de chaîne imprimable
  34. std::string base64_decode(const std::string &src) {
  35.     using namespace boost::beast::detail::base64;
  36.  
  37.  
  38.     //Base64 Decode dan un string mais de type Hex
  39.     std::string destHex;
  40.     destHex.resize(decoded_size(src.size()));
  41.  
  42.     std::pair<std::size_t, bool> result = decode(&destHex[0], src.data(), src.size());//adst[0],src,src.size
  43.     destHex.resize(result.first);  // Resize to the actual decoded size
  44.    
  45.     //Conversion Hex -> Hex String
  46.     string HexString;
  47.     std::ostringstream oss;
  48.     for (auto item:destHex){
  49.         oss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(item);
  50.     }
  51.    
  52.     std::string hex_representation = oss.str();
  53.    
  54.     return hex_representation;
  55. }
  56.  
  57.  
  58.  
  59.  
  60. int main (){
  61.     string data="060200000000";
  62.     vector <unsigned char > data_char=hex_to_bytes (data);
  63.    
  64.     cout <<"Data Hex : "<<data<<endl;
  65.    
  66.     string data_base64=base64_encode(data_char);//Encode
  67.     cout <<"Base64 :"<< data_base64<<endl;
  68.    
  69.     string data_decoded=base64_decode(data_base64) ;
  70.     if (data_decoded.empty()) {
  71.         std::cerr << "Error: Decoded data is empty" << std::endl;
  72.         return 1;
  73.     }else {
  74.         cout <<"Data Hex (decode)  :"<< data_decoded<<endl;
  75.     }
  76.    
  77.  
  78.     return 0;
  79. }
  80.  
Add Comment
Please, Sign In to add comment