解密与RSA_SSLV23_PADDING不工作

Decryption with RSA_SSLV23_PADDING not working

本文关键字:工作 PADDING SSLV23 RSA 解密      更新时间:2023-10-16

我正在使用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时,它工作得很好。

解密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。有关阅读,请参见加密令牌行业糟糕的几年。