我正在使用 Crypto++ 使用 AES 加密字符串。好的,它工作正常,但现在我想创建一个返回作为键的字节值的函数。
byte AESBest::gen_key()
{
AutoSeededRandomPool prng;
// warning: address of local variable ‘key’ returned [enabled by default]
byte key[AES::MAX_KEYLENGTH];
prng.GenerateBlock(key, sizeof(key));
//Error: invalid conversion from ‘byte {aka unsigned char}’ to ‘const byte* {aka const unsigned char*}’ [-fpermissive] }
return key;
}
好。我无法归还钥匙,因为有些事情不清楚。当我设置byte key[AES::MAX_KEYLENGTH]
eclipse 时,向我显示似乎返回的警告。但是最后返回键时,出现了关于无效转换的奇怪错误。
为什么会这样?
我怎么解决这个问题?
编辑:嗯。现在我有这两个功能。但是第一个效果很好,返回了 aes 键的 64 个字符。(gen_all)
第二个——我不知道为什么——只返回 4 个!为什么?(gen_part)
string AESBest::gen_all()
{
AutoSeededRandomPool prng;
byte key[AES::MAX_KEYLENGTH];
prng.GenerateBlock(key, sizeof(key));
string encoded;
encoded.clear();
StringSource(key, sizeof(key), true,
new HexEncoder(
new StringSink(encoded)
)
);
return encoded;
}
和:
string AESBest::gen_part()
{
AutoSeededRandomPool prng;
std::vector<byte> key(AES::MAX_KEYLENGTH);
prng.GenerateBlock(key.data(), key.size());
string encoded;
encoded.clear();
StringSource(key.data(), sizeof(key.size()), true,
new HexEncoder(
new StringSink(encoded)
)
);
return encoded;
}
第二个的bug在哪里?
编辑:没关系!错误在sizeof
,所以 key.size() NO sizeof(key.size())