OpenSSL RSA_private_decrypt() 失败并显示"oaep decoding error"

OpenSSL RSA_private_decrypt() fails with "oaep decoding error"

本文关键字:显示 oaep decoding error private RSA decrypt OpenSSL 失败      更新时间:2023-10-16

我正在尝试使用OpenSSL实现RSA加密/解密。不幸的是,我的代码在解密过程中失败了。

我正在使用Qt。这是我的代码:

QByteArray CryptRSA::rsaEncrypt(QByteArray input)
{
    QByteArray result(RSA_size(rsaKey), '');
    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), '');
    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;
    }
}

错误如下:

error:0407A079:rsa routines:RSA_padding_check_PKCS1_OAEP:oaep decoding error
error:04065072:rsa routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed

它在中失败

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_public_encrypt成功,则将result阵列的大小设置为encryptedBytes。对RSA_private_decrypt执行类似操作。

此外,还不清楚你想用RSA_size(rsaKey) - 42做什么。我觉得这很奇怪。我希望是input.size()。但我猜你知道你在用你的数组做什么。

可能还有其他问题(比如公钥和私钥不匹配),但我们需要看到更多的代码和参数。

此外,您应该使用EVP_*接口。请参阅OpenSSL wiki上的EVP信封的非对称加密和解密。