Кстати, я тут с удивлением для себя открыл то, что в BOOST есть поддержка BASE64. Надо только чуть-чуть напильником подпилить:
#include <boost/archive/iterators/base64_from_binary.hpp>
#include <boost/archive/iterators/binary_from_base64.hpp>
#include <boost/archive/iterators/transform_width.hpp>
template<typename Container, typename CharT>
inline String base64_encode(InputContainerType const & cont)
{
using namespace boost::archive::iterators;
typedef base64_from_binary<transform_width<
typename InputContainerType::const_pointer, 6, 8, boost::uint8_t>
> base64_t;
return String(base64_t(&cont[0]), base64_t(&cont[0] + cont.size()));
}
template<typename Container, typename CharT>
inline Container base64_decode(std::basic_string<CharT> str)
{
str.append(str.size() % 4, CharT('='));
typedef boost::archive::iterators::transform_width<
boost::archive::iterators::binary_from_base64<CharT *>, 8, 6,
boost::uint8_t
> binary_t;
typename std::basic_string<CharT>::size_type pos =
str.find_last_not_of(CharT('='));
pos = (pos == str.size() -1 ? str.size() : pos );
return Container(binary_t(&str[0]), binary_t(&str[0] + pos));
}
#include <boost/archive/iterators/binary_from_base64.hpp>
#include <boost/archive/iterators/transform_width.hpp>
template<typename Container, typename CharT>
inline String base64_encode(InputContainerType const & cont)
{
using namespace boost::archive::iterators;
typedef base64_from_binary<transform_width<
typename InputContainerType::const_pointer, 6, 8, boost::uint8_t>
> base64_t;
return String(base64_t(&cont[0]), base64_t(&cont[0] + cont.size()));
}
template<typename Container, typename CharT>
inline Container base64_decode(std::basic_string<CharT> str)
{
str.append(str.size() % 4, CharT('='));
typedef boost::archive::iterators::transform_width<
boost::archive::iterators::binary_from_base64<CharT *>, 8, 6,
boost::uint8_t
> binary_t;
typename std::basic_string<CharT>::size_type pos =
str.find_last_not_of(CharT('='));
pos = (pos == str.size() -1 ? str.size() : pos );
return Container(binary_t(&str[0]), binary_t(&str[0] + pos));
}
boost- это такой ужас на крыльях ночи А base64 есть везде и без буста (например на C).
Зря ты так про BOOST. Очень полезная библиотека, кучу времени экономит.