Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenSSL RSA_private_decrypt()失败,错误为;oaep解码错误“;_C++_Qt_Cryptography_Openssl_Rsa - Fatal编程技术网

C++ OpenSSL RSA_private_decrypt()失败,错误为;oaep解码错误“;

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

我正在尝试使用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.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