繁体   English   中英

Base64解码错误

[英]Base64 decoding error

使用Boost C ++库,我尝试使用以下代码对以下base64编码值进行base64解码:OTE4ZDUxYzM0ZTIyNmEzZDVmY2NjNjAyMzYyOTU5MTg0NzVmYWEwMjox:

std::string base64_decode(const std::string& s) {
  namespace bai = boost::archive::iterators;

  std::stringstream os;

  typedef bai::transform_width<bai::binary_from_base64<const char *>, 8, 6> base64_dec;

  unsigned int size = s.size();

  // Remove the padding characters, cf. https://svn.boost.org/trac/boost/ticket/5629
  if (size && s[size - 1] == '=') {
    --size;
    if (size && s[size - 1] == '=') --size;
  }
  if (size == 0) return std::string();

  std::copy(base64_dec(s.data()), base64_dec(s.data() + size),
            std::ostream_iterator<char>(os));

  return os.str();

看起来编码正确进行了,但是在解码时,我仍然遇到以下错误: 在抛出boost :: archive :: iterators :: dataflow_exception what()实例之后调用终止调用what():尝试解码 不在base64字符集中 的值在行:

std::copy(base64_dec(s.data()), base64_dec(s.data() + size), std::ostream_iterator<char>(os)); 

我没有发表评论的声誉,因此,这是一个答案:

听起来像“应该尝试解码不在base64字符集中的值”对于给定的输入OTE4ZDUxYzM0ZTIyNmEzZDVmY2NjNjAyMzYyOTU5MTg0NzVmYWEwMjox ,您应该验证该函数的实际输入: https : OTE4ZDUxYzM0ZTIyNmEzZDVmY2NjNjAyMzYyOTU5MTg0NzVmYWEwMjox

改变

std::copy(base64_dec(s.data()), base64_dec(s.data() + size), std::ostream_iterator<char>(os))

return std::string( base64_dec(s.c_str()), base64_dec(s.c_str() + size))

解决了问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM