我正在使用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_PADDING
或RSA_PKCS1_OAEP_PADDING
时,它可以正常工作。
答案 0 :(得分:0)
解密,RSA_SSLV23_PADDING无法正常工作
这是用于SSLv3及更高版本中的回滚攻击检测的填充方案。它意味着在SSL / TLS的上下文中使用。
当我使用
RSA_PKCS1_PADDING
或RSA_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。