2015-05-21 67 views
0

我正在使用openssl並試圖解密使用RSA_SSLV23_PADDING加密的數據。代碼如下:解密與RSA_SSLV23_PADDING不起作用

BIO *pBPK=NULL; 
RSA *pPrivKey; 
pBPK = BIO_new_mem_buf ((void*) strKey, -1); 
pPrivKey = PEM_read_bio_RSAPrivateKey (pBPK, NULL, NULL, NULL); 
int flen = RSA_size (pPrivKey); 
unsigned char* from = (unsigned char*)strData; 
int maxSize = RSA_size (pPrivKey); 
unsigned char* to = new unsigned char[maxSize]; 
int res = RSA_private_decrypt (flen, from, to, pPrivKey, RSA_SSLV23_PADDING); 

但我總是得到res-1。當我使用RSA_PKCS1_PADDINGRSA_PKCS1_OAEP_PADDING時,它工作正常。

+3

您如何知道數據已用RSA_SSLV23_PADDING加密?你是什​​麼意思_「當我使用RSA_PKCS1_PADDING或RSA_PKCS1_OAEP_PADDING時,它工作正常。」_?什麼是「工作正常」_? –

+0

我實際上正在創建一個完成所有這些加密解密的框架。我以填充方案作爲參數並使用它。當我提供RSA_PKCS1_PADDING或RSA_PKCS1_OAEP_PADDING時,它工作正常,但當我提供RSA_SSLV23_PADDING時,解密失敗。在加密期間,RSA_public_encrypt()不會返回-1,而是長度。所以我假設它正在工作。 – abhithakur88

+0

「正常工作」表示我能夠從加密文本中檢索原始數據 – abhithakur88

回答

0

解密與RSA_SSLV23_PADDING不工作

這是用於SSLv3和上述回滾攻擊檢測填充方案。其目的是在SSL/TLS的情況下使用。

當我使用RSA_PKCS1_PADDINGRSA_PKCS1_OAEP_PADDING時,它工作正常。

對,這些都是現代RSA填充方案。


int res = RSA_private_decrypt (flen, from, to, pPrivKey, RSA_SSLV23_PADDING);

要使用RSA_SSLV23_PADDING,我相信你的EVP_PKEY_CTX*調用EVP_PKEY_CTX_set_rsa_padding。詳細信息請參閱EVP_PKEY_CTX_ctrl手冊頁。


你或許應該避免RSA_PKCS1_PADDING,並使用RSA_PKCS1_OAEP_PADDING。閱讀請參見A bad couple of years for the cryptographic token industry