【发布时间】:2011-10-31 13:20:11
【问题描述】:
我正在使用 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())
【问题讨论】:
-
您需要a good C++ book。而且您非常迫切地需要它。
-
你需要更好地阅读我的问题并了解 Crypto++,因为类型字节是这个库的原生类型。
-
@user840718
:我没有直接看到任何理由假设@sbi 的意思是暗示他的言论与任何特定关键字的出现有关(比如,也许,byte) -
@user840718:我已阅读您的问题。您尝试返回一个局部变量,该变量是一个数组,其中函数被定义为返回一个字节,您以错误的方式键入了两个编译器消息之一,并且您无法解释这些消息,尽管事实上两者都很明显说出问题所在。在我教 C++ 时,我看到很多学生犯了这样的小错误。这与 Crypto++ 无关,只是您似乎对 C++ 了解不够,无法正确使用此 API。因此我的评论。
-
好吧,我应该说不好。谢谢。