2012-04-13 14 views
0

プロジェクトで暗号化を使用する必要があります(Visual C++ 2008 sp1、いくつかのDLLを持つexe、サードパーティ製のライブラリを使用します)。私はcrypto ++を選んだ。私は静的ライブラリとして使用します。まず、テストコンソールアプリケーションに必要なすべての機能をテストしましたが、すべて正常に動作します。crypto ++が異常にクラッシュする

私はこの機能をプロジェクトに統合し始めました。

そしてそれは、このような非常に単純含め、cryptopp関数呼び出しの多くにクラッシュ:0x00c56619で

未処理の例外で:で、このコード行の通話中に

CryptoPP::FileSource file("publicKeySign.der", true); 

、アプリケーションのクラッシュStarter.exe:0xC0000005:場所0x00006f70を読み取るアクセス違反。マルチスレッドDLLランタイムライブラリを使用する++

Starter.exe!CryptoPP::member_ptr<CryptoPP::AlgorithmParametersBase>::reset(CryptoPP::AlgorithmParametersBase * p=0x00000000) Line 50 + 0x9 bytes C++ 
Starter.exe!CryptoPP::AlgorithmParameters::operator()<char const *>(const char * name=0x00d8ec04, const char * const & value=0x00d88a44, bool throwIfNotUsed=true) Line 356 C++ 
Starter.exe!CryptoPP::MakeParameters<char const *>(const char * name=0x00d8ec04, const char * const & value=0x00d88a44, bool throwIfNotUsed=true) Line 388 + 0x2d bytes C++ 
Starter.exe!CryptoPP::FileSource::FileSource(const char * filename=0x00d88a44, bool pumpAll=true, CryptoPP::BufferedTransformation * attachment=0x00000000, bool binary=true) Line 65 + 0x6d bytes C++ 
Starter.exe!PDD::PDDApp2::Open() Line 237 C++ 
Starter.exe!WinMain(HINSTANCE__ * __formal=0x00c50000, HINSTANCE__ * __formal=0x00c50000, HINSTANCE__ * __formal=0x00c50000, HINSTANCE__ * __formal=0x00c50000) Line 387 + 0xb bytes C++ 
Starter.exe!__tmainCRTStartup() Line 578 + 0x1d bytes C 
[email protected]@12() + 0x12 bytes  
[email protected]() + 0x27 bytes 
[email protected]() + 0x1b bytes  

どちらも私のプロジェクトと暗号:

は、ここに私のコールスタックです。

私は、プロジェクトオプションと同じになるようにcrypto ++プロジェクトオプションを変更しようとしましたが、一部のアプリケーションを変更した後、別の呼び出しスタックでクラッシュすることはありません。

アイデアをいただければ幸いです!

ありがとうございます!

アントン

+0

ああ、アンマネージコードの実行の楽しさ。あなたが間違っている部分を見つけるまで、静的なコードアナライザの束をゆるめることをお勧めします。 CryptoPPは比較的安定したlibであるため、まず自分のコードが正しいことを確認してから、最新のCryptoPPライブラリのコードをテストします。 –

答えて

1

私はcryptoppに掘ったとき、私はそれはいくつかの隠された検証を行うことがわかりました。そのうちの1人はfipstest.cppにいました。しかし、ライブラリ内のtry/catchは実際の例外メッセージを隠します。

私が正しいメッセージを受け取ったとき、渡されたパラメータが単純に特定のアルゴリズム(RSA)に対して短すぎることがわかりました。これらの64ビットは、ウェブ上の例からとったものです。キーを1024に変更したときに問題がなくなった。

乾杯;)

AutoSeededRandomPool prng; 
RSA::PrivateKey privKey; 
//privKey.GenerateRandomWithKeySize(prng, 64); <- throws exception 
privKey.GenerateRandomWithKeySize(prng, 1024); 
関連する問題