- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须在一个数据包中发送一个随机生成的数字 (rng
),因此,必须转换一个 SecByteBlock
。我用 libcrafter
将 rng
数组放入 RawLayer
数据包中。
我关注了this answer ;但它给我带来了一个无效转换错误。
这是我使用的代码:
AutoSeededRandomPool prng;
SecByteBlock rng1;
prng.GenerateBlock( rng1, rng1.size() );
string rng1_str(reinterpret_cast<char const*>(rng1));
std::string rng1_str = std::string(rng1.data(), rng1.size());
Crafter::RawLayer number(rng1_str);
这两个想法都不行,都给我:
error: invalid conversion from ‘CryptoPP::AllocatorWithCleanup<unsigned char>::pointer {aka unsigned char*}’
to ‘const char*’ [-fpermissive]
std::string rng1_str = std::string(rng1.data(), rng1.size());
由于 RawLayer
接受 std::string
或 const byte*
作为构造函数,我想将 >SecBlockByte
转换成这两种格式之一...
最佳答案
PRNG 的输出可能嵌入了 NULL,因此您无法使用常规的 C 字符串操作对其数据进行操作。这意味着第一个陈述可能是错误的。
string rng1_str(reinterpret_cast<char const*>(rng1));
std::string rng1_str = std::string(rng1.data(), rng1.size());
我不确定你在用第二个语句做什么,但它需要像第一个一样转换(你可以取消分配):
std::string rng1_str(reinterpret_cast<const char*>(rng1.data()), rng1.size());
既然你说过你“RawLayer
接受std::string
或const byte*
作为构造函数”,你可以试试:
SecByteBlock rng(16);
prng.GenerateBlock( rng, rng.size() );
Crafter::RawLayer number( rng.data(), rng.size() );
另外,一定要确定 SecByteBlock
的大小。 one 的原始声明是一个大小为 0 的数组,没有 内存块支持它。也就是说,rng.size()
将为 0,只有以下内容:
SecByteBlock rng;
您还可以执行以下操作:
SecByteBlock rng;
// Make it 16-bytes in size, memory uninitialized
rng.New(16);
或者:
SecByteBlock rng;
// Make it 16-bytes in size, memory initialized to 0
rng.CleanNew(16);
如果你真的想花哨并避免内存块的运行时分配,那么使用 FixedSizeSecBlock
:
FixedSizeSecBlock<byte, 16> rng;
但这是一种更高级的技术,所以不要陷入困境。
我发现 C/C++ 不愿意在 signed char
和 unsigned char
之间自动转换非常烦人,因为它对我来说都是 8 位二进制数据(我理解语言规则的需要)。但我认为我需要一个 reinterpret_cast
而不是 static_cast
是荒谬的。
关于c++ - SecByteBlock 到字符串转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32459580/
我必须在一个数据包中发送一个随机生成的数字 (rng),因此,必须转换一个 SecByteBlock。我用 libcrafter将 rng 数组放入 RawLayer 数据包中。 我关注了this a
我正在尝试将自定义 key 与 Crypto++ 结合使用。我的程序使用随 secret 钥,但当我尝试向 SecByteBlock 传递 key 时出现智能感知错误。 引用文献here将其定义为 S
我在为 crypto++ 中的 3 key 三重 DES 分配新 key 时遇到问题。 我已经生成了一个字符串形式的新 key ,但需要将其分配给 SecByteBlock 以便在 Crypto++
我在尝试将 SecByteBlock 转换为字符串时遇到问题。这是我的案例: 我想使用带有静态 key 和动态 iv 的 AES 加密用户访问数据。我的代码是这样的: AesKeyIvFactory
我试图理解为什么使用 Crypto++ SecByteBlock 的以下代码有效: SecByteBlock block(10); std::cout << block[3]; 这就像 SecByte
我正在使用 Crypto++ 库: DH dh; AutoSeededRandomPool rnd; SecByteBlock priv(dh.PrivateKeyLength()); SecByte
我正在使用 Crypto++ 库在 CBC 模式下使用 AES 算法解密文件。我在 sample code 中遇到了 SecByteBlock 类AES 表示 The key is declared
我目前正在用 C++(使用 crypto++)编写河豚加密/解密程序。 我真的没有在谷歌上找到满意的答案。我正在尝试将 SecByteBlock 的 key 作为字符串发送,然后在另一部分作为字符串接
我目前正在从事 Cryptopp 加密项目,需要将 key 传递给 Blowfish 加密算法。 如果我理解正确,我需要编辑这两行: SecByteBlock key(Blowfish::DEFAUL
我目前正在用 C++(使用 crypto++)编写河豚加密/解密程序。 我真的没有在谷歌上找到满意的答案。我正在尝试将 SecByteBlock 的 key 作为字符串发送,然后在另一部分作为字符串接
我是一名优秀的程序员,十分优秀!