Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
php openssl-RSA_padding_check_PKCS1_type_2和RSA_EAY_PRIVATE_DECRYPT:padding check失败:RSA_EAY.c:602:_Php_Ssl_Encryption_Openssl_Rsa - Fatal编程技术网

php openssl-RSA_padding_check_PKCS1_type_2和RSA_EAY_PRIVATE_DECRYPT:padding check失败:RSA_EAY.c:602:

php openssl-RSA_padding_check_PKCS1_type_2和RSA_EAY_PRIVATE_DECRYPT:padding check失败:RSA_EAY.c:602:,php,ssl,encryption,openssl,rsa,Php,Ssl,Encryption,Openssl,Rsa,我很难理解我的问题是什么,所以我希望有人能帮助我。因此,我有一个xml文件,它是根据W3C构建的,因此,有一些特定的标记是用我的公钥加密的,现在我需要用我的私钥对它们进行解密,例如下面这段代码: <AuthenticatedPrivate Id="ID_AuthenticatedPrivate"> <enc:EncryptedKey xmlns:enc="http://www.w3.org/2001/04/xmlenc#"

我很难理解我的问题是什么,所以我希望有人能帮助我。因此,我有一个xml文件,它是根据W3C构建的,因此,有一些特定的标记是用我的公钥加密的,现在我需要用我的私钥对它们进行解密,例如下面这段代码:

<AuthenticatedPrivate Id="ID_AuthenticatedPrivate">
        <enc:EncryptedKey xmlns:enc="http://www.w3.org/2001/04/xmlenc#">
            <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" />
            <enc:CipherData>
                <enc:CipherValue>lwYdkG5Q5wfW/S7UzZDtnJMcAng3w3ketzkh68y1BeX+okNEj48b5rSWUC/4mNhT
N2QsHxOCkvKDavIGGSAP23tdp0VtdeHTNAszcgK4Xzc8VHGUEiswONCOxTzNWuwj
....
zfHceeHN50b8vzM/Rt/jTUq54eC3nE+lP3eTXbLj/YvpPo8H45Sti9YP9WZixGHz
Uvf6Go31+3JwsXXIUl3O+w==</enc:CipherValue>
            </enc:CipherData>
        </enc:EncryptedKey>
        <enc:EncryptedKey xmlns:enc="http://www.w3.org/2001/04/xmlenc#">
            <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" />
            <enc:CipherData>
                <enc:CipherValue>TvC1LCspgTsXqM1b8ClPCtAkAdXXzxe+Av7LMxYtUaqUbd8HeBuaS1cx3WwoVRDr
TWcrBEnv24GbIB5ygcMFW3DlGsXfmWJGnRNx/6xT/U15RQPgoD9AP4WFEHxthzP0
....
1ajG5lDjEu4TqjdL7DPGNu9HfI9boerJ5FUFQ/fMdD4xbDHdc4DgIQdTUgLFGHJz
RwOyfOAcSNoO/fpAkMXoEw==</enc:CipherValue>
            </enc:CipherData>
        </enc:EncryptedKey>
    </AuthenticatedPrivate>
我错过了什么?我在这方面浪费了太多时间,我看到了一些关于使用填充的内容,但我直接在我的php应用程序上使用:

openssl_private_decrypt($tag, $decrypted, $privkey, OPENSSL_PKCS1_PADDING);
但是没有!祝你好运

谢谢你的时间,问候

编辑

我使用的代码序列如下:

$xmlFile = file_get_contents(path_to_my_xml_file);
$privkey = openssl_pkey_get_private(path_to_my_private_key);
$arrCplContent =  XmlToArray::convert($xmlFile);
$tag = $arrCplContent['AuthenticatedPrivate']['enc:EncryptedKey'][0]['enc:CipherData']['enc:CipherValue'];
$b64Dec = base64_decode($tag);
$result = openssl_private_decrypt($b64Dec, $decrypted, $privkey, OPENSSL_PKCS1_OAEP_PADDING);
当我记录此操作时,结果是:

error:04099079:rsa routines:RSA_padding_check_PKCS1_OAEP_mgf1:oaep decoding error

考虑到这一点,这是正确的做法吗?

首先,在执行解密时,似乎您使用的是PKCS 1 v1.5填充而不是OAEP填充。你可以看到

注意XML文档中包含OAEP填充指示的行:

其中有两个
CipherValue
元素。通常这意味着密文是使用两个不同的密钥对创建的,因此使用两个单独的私钥。您可能只需要解密另一个
EncryptedKey

一般来说,要解决这个问题,XML加密或XML enc是一个非常重要的工具,您需要实现该标准,或者(通常推荐的)对其进行解密


免责声明:我与所示库无关,我对它的安全性也没有任何意见。

首先,在执行解密时,似乎您使用的是PKCS#1 v1.5填充而不是OAEP填充。你可以看到

注意XML文档中包含OAEP填充指示的行:

其中有两个
CipherValue
元素。通常这意味着密文是使用两个不同的密钥对创建的,因此使用两个单独的私钥。您可能只需要解密另一个
EncryptedKey

一般来说,要解决这个问题,XML加密或XML enc是一个非常重要的工具,您需要实现该标准,或者(通常推荐的)对其进行解密


免责声明:我不是所示图书馆的附属机构,我对图书馆的安全性没有任何意见。

嗨,Maarten,首先感谢你的回答,我真的被卡住了,我已经编辑了我的问题,你能看一下吗?关于这类问题的问题是,它基本上是调试,但对于我们来说,没有调试环境。检查您是否尝试了我指示的两个值,并在尝试解密之前进行比较。请在上面加糖,确保你有正确的钥匙,否则你会得到填充错误直到时间结束。注意,需要为OAEP配置一个哈希;通常这不是问题,但如果其他所有问题都失败了,你可以检查一下。嗨,马腾,首先感谢你的回答,我真的被困在这个问题上了,我已经编辑了我的问题,你能看一下吗?关于这类问题的问题是,它基本上是调试,但对于我们来说,没有调试环境。检查您是否尝试了我指示的两个值,并在尝试解密之前进行比较。请在上面加糖,确保你有正确的钥匙,否则你会得到填充错误直到时间结束。注意,需要为OAEP配置一个哈希;通常这不是问题所在,但如果所有其他方面都失败了,您可以检查它。
error:04099079:rsa routines:RSA_padding_check_PKCS1_OAEP_mgf1:oaep decoding error