C++ OpenSSL RSA_private_decrypt()失败,错误为;oaep解码错误“;
我正在尝试使用OpenSSL实现RSA加密/解密。不幸的是,我的代码在解密过程中失败了 我在用Qt。这是我的代码:C++ OpenSSL RSA_private_decrypt()失败,错误为;oaep解码错误“;,c++,qt,cryptography,openssl,rsa,C++,Qt,Cryptography,Openssl,Rsa,我正在尝试使用OpenSSL实现RSA加密/解密。不幸的是,我的代码在解密过程中失败了 我在用Qt。这是我的代码: QByteArray CryptRSA::rsaEncrypt(QByteArray input) { QByteArray result(RSA_size(rsaKey), '\0'); int encryptedBytes = RSA_public_encrypt(RSA_size(rsaKey) - 42, (unsigned char *)input.da
QByteArray CryptRSA::rsaEncrypt(QByteArray input)
{
QByteArray result(RSA_size(rsaKey), '\0');
int encryptedBytes = RSA_public_encrypt(RSA_size(rsaKey) - 42, (unsigned char *)input.data(), (unsigned char *) result.data(), rsaKey, RSA_PKCS1_OAEP_PADDING);
if (encryptedBytes== -1)
{
qDebug() << "Error encrypting RSA Key:";
handleErrors();
return QByteArray();
}
else
{
return result;
}
}
QByteArray CryptRSA::rsaDecrypt(QByteArray input)
{
QByteArray result(RSA_size(rsaKey), '\0');
int decryptedBytes = RSA_private_decrypt(RSA_size(rsaKey) - 42, (unsigned char *)input.data(), (unsigned char *)result.data(), rsaKey, RSA_PKCS1_OAEP_PADDING);
if (decryptedBytes == -1)
{
qDebug() << "Error decrypting RSA Key.";
handleErrors();
return QByteArray();
}
else
{
result.resize(decryptedBytes);
return result;
}
}
它失败于:
RSA_private_decrypt(RSA_size(rsaKey) - 42, (unsigned char *)input.data(),
(unsigned char *)result.data(), rsaKey, RSA_PKCS1_OAEP_PADDING);
我试过几件事,但都找不到我的错误
error:0407A079:rsa routines:RSA_padding_check_PKCS1_OAEP:oaep decoding error
error:04065072:rsa routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed
如果RSA\u public\u encrypt
成功,则将结果
数组的大小设置为encryptedBytes
。对RSA\u private\u decrypt
执行类似操作
另外,还不清楚您想用RSA_size(rsaKey)-42做什么。我觉得这很奇怪。我希望它是input.size()
。但我猜你知道你在用数组做什么
可能还有其他问题(比如公钥和私钥不匹配),但我们需要看到更多的代码和参数
此外,还应使用EVP.*
接口。请参阅OpenSSL wiki上的。您没有关于失败原因和位置的更多信息吗?以下是错误消息:错误:0407A079:rsa例程:rsa_padding_check_PKCS1_OAEP:OAEP解码错误:04065072:rsa例程:rsa_EAY_PRIVATE_DECRYPT:padding check失败它失败于:rsa_PRIVATE_DECRYPT(rsa_size(rsaKey)-42,(unsigned char*)*)input.data(),(unsigned char*)result.data(),rsaKey,RSA_PKCS1_OAEP_PADDING);@Adri-删除上面的注释。类似的信息应该通过单击编辑添加到问题中,而不是填充在无法读取的注释中:)我发现了我的错误。这实际上与我发布的函数无关,但与我认为RSA容器类的工作方式有关。事实证明,我只需要加载私钥进行解密。我通常先加载私钥,然后加载公钥,因此RSA对象只存储公钥,解密失败。我会将您的答案标记为已接受,因为我将“RSA_size(rsaKey)-42”更改为“input.size()”,尽管openSSL文档中另有说明。感谢您的帮助:)我在的OpenSSL文档中没有看到任何关于RSA_size(rsaKey)-42的内容。可以测试input.size()
,但上面的用法不正确。我相信42是可以填充的,如果input.size()+padding\u size>=RSA\u size(rsaKey)
,则RSA\u public\u encrypt
将失败。
error:0407A079:rsa routines:RSA_padding_check_PKCS1_OAEP:oaep decoding error
error:04065072:rsa routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed