Я пытаюсь научиться использовать классы Crypto++. Моя цель - генерировать открытые и закрытые ключи для шифрования RSA, а затем выполнять базовое шифрование и расшифровку открытого текста.Утечка памяти в Crypto ++ RSAES class
Так что я везу их примеру from here - "RSA Encryption Scheme (OAEP и SHA) с помощью фильтров", слегка модифицирован для читаемости:
Эта часть работает нормально:
CryptoPP::AutoSeededRandomPool rng;
//Generate Parameters
CryptoPP::InvertibleRSAFunction params;
params.GenerateRandomWithKeySize(rng, 3072);
//Create Keys
CryptoPP::RSA::PrivateKey privateKey(params);
CryptoPP::RSA::PublicKey publicKey(params);
std::string plain="Hello world!", cipher, recovered;
//Encryption
CryptoPP::RSAES_OAEP_SHA_Encryptor e(publicKey);
Но тогда, когда я называю этот блок:
CryptoPP::StringSink* pSS = new CryptoPP::StringSink(cipher);
CryptoPP::PK_EncryptorFilter* pEF = new CryptoPP::PK_EncryptorFilter(rng, e, pSS);
CryptoPP::StringSource ss1(plain, true, pEF);
Это вызывает утечку памяти. Я получаю следующее в окне Visual Studio
вывода:
Detected memory leaks!
Dumping objects ->
{24781} normal block at 0x029BCFF8, 28 bytes long.
Data: <class CryptoPP::> 63 6C 61 73 73 20 43 72 79 70 74 6F 50 50 3A 3A
{24780} normal block at 0x029BCFB0, 8 bytes long.
Data: < > F8 CF 9B 02 00 00 00 00
Object dump complete.
ОК, так что я сделал самую очевидную вещь и добавил эти:
delete pEF;
delete pSS;
но это вызвало необработанное исключение, поэтому я предположил, что один из деструкторы в классах Crypto ++ позаботились об удалении некоторых из этих объектов.
Итак, вопрос в том, откуда эта утечка?
Я попытался заходя в StringSink
, PK_EncryptorFilter
и StringSource
с Visual Studio отладчик, чтобы посмотреть, что происходит, но код довольно запутанным, чтобы понять это сразу.
Любая идея, как исправить эти утечки памяти?
Наверняка вы можете урезать свою утечку до [mcve] –
@jww: я сам смог ответить на свой второй вопрос. См. Редактирование в моем OP. – c00000fd
@jww: Эй! Я только что опубликовал решение этой второй проблемы, и вы удалили ее. WTF? – c00000fd