Я использую 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 покажи мне предупреждение, которое, похоже, вернулось.Но когда в конце возвращается ключ, возникает странная ошибка о недопустимом преобразовании.
Почему так происходит?
Как я могу решить эту проблему?
РЕДАКТИРОВАТЬ : Хорошо.Теперь у меня есть эти 2 функции.Но первый работает хорошо, возвращая 64 символа ключа aes.(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;
}
Где ошибка во втором?
РЕДАКТИРОВАТЬ: не важно!Ошибка была в sizeof
, поэтому key.size () НЕТ sizeof (key.size ())