fork download
  1. #include <iostream>
  2. #include <boost/archive/iterators/binary_from_base64.hpp>
  3. #include <boost/archive/iterators/base64_from_binary.hpp>
  4. #include <boost/archive/iterators/transform_width.hpp>
  5. #include <boost/algorithm/string.hpp>
  6. using namespace std;
  7.  
  8. bool lambdaFunc(char c) {
  9. return c == '\0';
  10. }
  11.  
  12. std::string decode64(const std::string& iEncodedVal) {
  13. const short aBitsin = 6;
  14. const short aBitsout = 8;
  15. std::string oDecodedVal = boost::algorithm::trim_right_copy_if(
  16. std::string(boost::archive::iterators::
  17. transform_width<boost::archive::iterators::binary_from_base64<std::string::const_iterator>, aBitsout, aBitsin>(
  18. iEncodedVal.begin()),
  19. boost::archive::iterators::
  20. transform_width<boost::archive::iterators::binary_from_base64<std::string::const_iterator>, aBitsout, aBitsin>(
  21. iEncodedVal.end())),
  22. lambdaFunc);
  23.  
  24. return oDecodedVal;
  25. }
  26.  
  27. std::string encode64(const std::string& iDecoded) {
  28. // convert to base64
  29. const short aBitsin = 8;
  30. const short aBitsout = 6;
  31. std::string oEncodedVal =
  32. std::string(boost::archive::iterators::base64_from_binary<
  33. boost::archive::iterators::transform_width<std::string::const_iterator, aBitsout, aBitsin> >(iDecoded.begin()),
  34. boost::archive::iterators::base64_from_binary<
  35. boost::archive::iterators::transform_width<std::string::const_iterator, aBitsout, aBitsin> >(iDecoded.end()));
  36. // pad with '='
  37. const int iSize = iDecoded.size();
  38. oEncodedVal.append((3 - (iSize % 3)) % 3, '=');
  39.  
  40. return oEncodedVal;
  41. }
  42. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  43. int main() {
  44.  
  45. std::string decodedString = "8uDu84iOR0x5GlGZupB4FLUBZN3SpxqdP95CBKPyyhO0"; //input
  46. std::string encodedString = ""; //input
  47.  
  48. std::cout<<"Encoded key: "<<encode64(decodedString)<<std::endl;
  49. std::cout<<"Decoded key: "<<decode64(encodedString)<<std::endl;
  50.  
  51. return 0;
  52. }
  53. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  54.  
Success #stdin #stdout 0.01s 5408KB
stdin
Standard input is empty
stdout
Encoded key: OHVEdTg0aU9SMHg1R2xHWnVwQjRGTFVCWk4zU3B4cWRQOTVDQktQeXloTzA=
Decoded key: