2017-08-23 3 views
-1

a full, basic code exampleが含まれており、次のコマンドでコンパイルできます(ブーストがインストールされている) "g ++ -std = C++ 11 -g test.cpp -lssl -lcrypto -lboost_system "C++ OpenSSL EVP_DigestVerify RSA_R_BAD_PAD_BYTE_COUNTで断続的に失敗する

コード私は、OpenSSL EVP Signing and Verifyingにかなり従っており、メモリ管理のためのBoostリファクタリングが少しあります。

しかし、その動作は非常に断続的で、異なるキーと異なるテキストで変化します。私はここで何かが不足していると確信していますが、時間の圧力のために、私は問題がなかったopensslユーティリティへの安全なシステムコールを作成しようとしています。

次のテスト結果は、この問題を示しています。 "A"と "AAA"は署名されて正常に検証されますが、 "AA"はRSA_R_BAD_PAD_BYTE_COUNTのパディングエラーで失敗します。これを正しく試すために、パディングをPKCSに設定しましたが、違いはありませんでした。

2048 bit [2] - Text: A - Success 
Authentication failure: 67567722, rsa_pk1.c, 103, , 0 257 
Error string: error:0407006A:lib(4):func(112):reason(106) 
2048 bit [2] - Text: AA - Failure 
2048 bit [2] - Text: AAA - Success 

ここのポインタは大変ご満足いただけます!

+0

コードを表示してください。スタックオーバーフローはあなたからの閉鎖理由を隠すので:*デバッグのヘルプを求める質問( "なぜこのコードは機能していないの?")は、質問自体にそれを再現するのに必要な特定の問題やエラー、 。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:[最小限で完全で検証可能なサンプルの作成方法](http://stackoverflow.com/help/mcve)* – jww

+0

コードの最初の行にリンクがあります – mgibson

答えて

3

問題は、あなたがtestSignVerifystringchar*を変換している方法に関係しています:

string hashString((char*)pHash.get()); 

は次のようになります。

string hashString(pHash.get(), hashLength); 

デフォルトの文字列のコンストラクタが最初に停止しますので、それはありますそれは通常の文字列では問題ありませんが、暗号化ハッシュでは可能な文字の1つに過ぎません。

関連する問題