2012-02-24 94 views
7

當我嘗試使用OpenSSL中的CMS解密加密的S/MIME郵件時,解密方法返回0,表示未成功。OpenSSL解密失敗,但錯誤代碼爲0

OpenSSL.org說..

CMS_decrypt()爲失敗則返回任一1表示成功或0。可以從ERR_get_error獲得的誤差(3)

當運行此...

out = BIO_new(BIO_s_mem()); 
if (!out) 
     assert(false); 

int error = CMS_decrypt(cms, rkey, rcert, out, NULL, 0); 
    if (!error) { 
    fprintf(stderr, "Error Decrypting Data\n"); 
    printf("error code: %d\n", ERR_get_error()); 
    ERR_print_errors_fp(stderr); 
    assert(false); 
} 

...錯誤變量爲0,這意味着發生了錯誤,並從ERR_get_error()錯誤代碼是也是0.另外ERR_print_errors_fp()不打印任何意思是沒有錯誤。

從上述代碼的輸出:

Error Decrypting Data 
error code: 0 
Assertion failed: (false) 

有沒有人有一個建議是怎麼回事錯在這裏?謝謝

+1

解密成功嗎?如果是這樣,則可能需要檢查錯誤是否按預期返回0(返回值可能已被意外交換),或者僅在控制語句 – 2012-02-24 15:31:04

+0

@ MD-Tech:Nope中使用「ERR_get_error()」值。 : -/BIO是空的。即使我創建文件BIO而不是mem BIO,它會創建新文件但不會寫入任何內容... – Chris 2012-02-24 22:29:06

回答

0

經過數週的嘗試不同的方法和挫折之後,我最終使用了OpenSSL的PKCS#7解密。 由於CMS基本上基於PKCS#7,因此使用CMS進行加密和使用PKCS7進行解密工作良好。

我用過的方法是pkcs7_decrypt()

0

出於好奇,ERR_peek_last_error()返回什麼?

+0

我認爲它是0,因爲我嘗試過所有內容,但沒有任何(openssl)錯誤。 – Chris 2012-05-11 17:08:45

相關問題