attempt to decode a value not in base64 char set(尝试解码不在 base64 字符集中的值)
问题描述
我使用以下代码片段使用 Boost C++ 库对字符串进行 base64 编码和解码.
I am using the following code snippet to base64 encode and decode a string using Boost C++ library.
//Base64 Encode Implementation using Boost C++ library
const std::string base64_padding[] = {"", "=", "=="};
std::string X_Privet_Token_Generator::base64_encode(const std::string & s)
{
namespace bai = boost::archive::iterators;
std::stringstream os;
// convert binary values to base64 characters
typedef bai::base64_from_binary
// retrieve 6 bit integers from a sequence of 8 bit bytes
<bai::transform_width<const char *, 6, 8> > base64_enc; // compose all the above operations in to a new iterator
std::copy(base64_enc(s.c_str()), base64_enc(s.c_str() + s.size()), std::ostream_iterator<char>(os));
os << base64_padding[s.size() % 3];
return os.str();
}
std::string X_Privet_Token_Generator::base64_decode(std::string & s)
{
namespace bai = boost::archive::iterators;
std::stringstream os;
// convert binary values to base64 characters
typedef bai::binary_from_base64
<bai::transform_width<const char *, 8, 6> > base64_dec;
unsigned int size = s.size();
// Remove the padding characters, cf.
if (size && s[size - 1] == '=')
{
--size;
if (size && s[size - 1] == '=')
--size;
}
if (size == 0)
return std::string();
LOGINFO("Hash decoded token : %s", s.c_str());
std::copy(base64_dec(s.data()), base64_dec(s.data() + size), std::ostream_iterator<char>(os));
std::cout<< os.str();
return os.str();
}
编码效果很好,但是在解码时出现以下错误:
Encoding works well, however, while decoding I get the following error:
在抛出 boost::archive::iterators::dataflow_exception
what()
:尝试解码不在 base64 字符集中的值
what()
: attempt to decode a value not in base64 char set
是否是导致此问题的填充字符之一?我在这里遗漏了什么吗?
Is it one of the padded characters that is causing this issue? Am I missing something here?
推荐答案
填充字符 '=' 是 b64 编码数据的一部分,在解码之前不应删除.b64 以 4 个字符的块进行编码,我怀疑在解码时它会在字符串末尾读取 ' ' 而不是预期的 '='.
The padding characters '=' are part of the b64 encoded data and should not be removed before decoding. b64 is encoded in blocks of 4 character, I suspect that while decoding it reads a ' ' instead of an expected '=' at the end of the string.
这篇关于尝试解码不在 base64 字符集中的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:尝试解码不在 base64 字符集中的值
基础教程推荐
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 从 std::cin 读取密码 2021-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01