base64.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #include "../include/base64.h"
  2. #include <boost/algorithm/string.hpp>
  3. #include <boost/archive/iterators/base64_from_binary.hpp>
  4. #include <boost/archive/iterators/binary_from_base64.hpp>
  5. #include <boost/archive/iterators/transform_width.hpp>
  6. std::string base64::decode(const std::string &val) {
  7. using namespace boost::archive::iterators;
  8. using It =
  9. transform_width<binary_from_base64<std::string::const_iterator>, 8, 6>;
  10. return boost::algorithm::trim_right_copy_if(
  11. std::string(It(std::begin(val)), It(std::end(val))),
  12. [](char c) { return c == '\0'; });
  13. }
  14. std::vector<char> base64::decodeVector(const std::string &val) {
  15. using namespace boost::archive::iterators;
  16. using It =
  17. transform_width<binary_from_base64<std::string::const_iterator>, 8, 6>;
  18. return boost::algorithm::trim_right_copy_if(
  19. std::vector<char>(It(std::begin(val)), It(std::end(val))),
  20. [](char c) { return c == '\0'; });
  21. }
  22. std::string base64::encode(const std::string &val) {
  23. using namespace boost::archive::iterators;
  24. using It =
  25. base64_from_binary<transform_width<std::string::const_iterator, 6, 8>>;
  26. auto tmp = std::string(It(std::begin(val)), It(std::end(val)));
  27. return tmp.append((3 - val.size() % 3) % 3, '=');
  28. }
  29. std::string base64::encodeVector(const std::vector<char> &val) {
  30. using namespace boost::archive::iterators;
  31. using It = base64_from_binary<
  32. transform_width<std::vector<char>::const_iterator, 6, 8>>;
  33. auto tmp = std::string(It(std::begin(val)), It(std::end(val)));
  34. return tmp.append((3 - val.size() % 3) % 3, '=');
  35. }