私はCrypto++クラスを使用する方法を学ぼうとしています。私の目標は、RSA暗号化用の公開鍵と秘密鍵を生成し、次に平文の基本的な暗号化と復号化を行うことです。Crypto ++ RSAESクラスのメモリリーク
だから私は、彼らの例from here取っている - 少し読みやすくするために変更され、 "フィルタを使用してRSA暗号化スキーム(OAEPおよびSHA)" を:
この部分をOKに動作します:
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);
それはメモリリークの原因となります。
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.
OKをので、私は最も明白なことをしたし、これらを追加しました:私はVisual Studio
出力ウィンドウに次のように取得
delete pEF;
delete pSS;
が、それは未処理の例外を発生させたので、私は1つのことを想定しましたCrypto ++クラスのデストラクタはそれらのオブジェクトのいくつかを削除しました。
質問があります - この漏れはどこから来ていますか?
Visual StudioデバッガでStringSink
、PK_EncryptorFilter
、StringSource
に進んでみましたが、そのコードは非常に複雑になっています。
これらのメモリリークを修正するにはどうすればよいですか?
確かにあなたは[mcve] –
@ jwwにあなたのリークをトリミングすることができます:私は自分自身の2番目の質問に答えることができました。私のOPの編集を見てください。 – c00000fd
@jww:ねえ!私はちょうどその第2の問題の解決策を掲示し、それを削除した。 WTF? – c00000fd