RSA_SSLV23_PADDING解密无法正常工作

时间:2015-05-21 06:16:48

标签: c++ openssl rsa

我正在使用openssl并尝试解密使用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时,它可以正常工作。

1 个答案:

答案 0 :(得分: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_set_rsa_padding上致电EVP_PKEY_CTX*。有关详细信息,请参阅EVP_PKEY_CTX_ctrl手册页。

您应该避免RSA_PKCS1_PADDING,并使用RSA_PKCS1_OAEP_PADDING。有关阅读,请参阅A bad couple of years for the cryptographic token industry