2017-08-23 111 views
-1

我已經包含a full, basic code example可以使用下面的命令(已安裝boost)編譯「g ++ -std = C++ 11 -g test.cpp -lssl -lcrypto -lboost_system「C++ OpenSSL EVP_DigestVerify間歇性地失敗rsa_pk1.c:103與RSA_R_BAD_PAD_BYTE_COUNT

我的代碼非常接近OpenSSL EVP簽名和驗證Asymmetric example,並對內存管理進行了一些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

請顯示您的代碼。由於Stack Overflow隱藏了你的密切原因:*尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現它的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:[如何創建最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve)。* – jww

+0

您會在代碼的第一行找到一個鏈接 – mgibson

回答

3

問題與你轉換成char*裏面stringtestSignVerify方式做:

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

應該是:

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

這是因爲默認字符串構造函數會停在第一它遇到了,這對於普通字符串來說是可以的,但對於加密哈希,它只是可能的字符之一。