#include <iostream>
#include <boost/archive/iterators/binary_from_base64.hpp>
#include <boost/archive/iterators/base64_from_binary.hpp>
#include <boost/archive/iterators/transform_width.hpp>
#include <boost/algorithm/string.hpp>
using namespace std;
bool lambdaFunc(char c) {
return c == '\0';
}
std::string decode64(const std::string& iEncodedVal) {
const short aBitsin = 6;
const short aBitsout = 8;
std::string oDecodedVal = boost::algorithm::trim_right_copy_if(
std::string(boost::archive::iterators::
transform_width<boost::archive::iterators::binary_from_base64<std::string::const_iterator>, aBitsout, aBitsin>(
iEncodedVal.begin()),
boost::archive::iterators::
transform_width<boost::archive::iterators::binary_from_base64<std::string::const_iterator>, aBitsout, aBitsin>(
iEncodedVal.end())),
lambdaFunc);
return oDecodedVal;
}
std::string encode64(const std::string& iDecoded) {
// convert to base64
const short aBitsin = 8;
const short aBitsout = 6;
std::string oEncodedVal =
std::string(boost::archive::iterators::base64_from_binary<
boost::archive::iterators::transform_width<std::string::const_iterator, aBitsout, aBitsin> >(iDecoded.begin()),
boost::archive::iterators::base64_from_binary<
boost::archive::iterators::transform_width<std::string::const_iterator, aBitsout, aBitsin> >(iDecoded.end()));
// pad with '='
const int iSize = iDecoded.size();
oEncodedVal.append((3 - (iSize % 3)) % 3, '=');
return oEncodedVal;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int main() {
std::string decodedString = ""; //input
std::string encodedString = "ZjYwMTZmZGQtMzg0NS00ZjcxLWJmYjEtM2NiNmE2NDgzNzVm"; //input
std::cout<<"Encoded key: "<<encode64(decodedString)<<std::endl;
std::cout<<"Decoded key: "<<decode64(encodedString)<<std::endl;
return 0;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++