gpt4 book ai didi

php openssl - RSA_padding_check_PKCS1_type_2 和 RSA_EAY_PRIVATE_DECRYPT :padding check failed:rsa_eay. c:602:

转载 作者:行者123 更新时间:2023-12-04 22:42:31 24 4
gpt4 key购买 nike

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

<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>
我需要解密它,所以我所做的是:
  • 解析了xml,得到了我需要的标签(CipherValue)。实际上把它放在了一个文件中,cypher.xml
  • 猫密码.xml| base64 -D > 原始文件
  • openssl rsautl -decrypt -in rawFile -out plaintext -inkey private.pem

  • 结果是:
    4476804716:error:0407109F:rsa routines:RSA_padding_check_PKCS1_type_2:pkcs decoding error:rsa_pk1.c:273:
    4476804716:error:04065072:rsa routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed:rsa_eay.c:602:
    我在这里想念什么?我在这方面浪费了太多时间,我看到了一些关于使用填充的东西,但我直接在我的 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
    考虑到 this,这是正确的做事方式吗? ?.

    最佳答案

    首先,您在执行解密时似乎使用 PKCS#1 v1.5 填充而不是 OAEP 填充。可以看 OPENSSL_PKCS1_OAEP_PADDING listed for openssl_private_decrypt .
    请注意 XML 文档中包含 OAEP 填充指示的行:

    <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" />


    有两个 CipherValue里面的元素。通常这意味着密文是使用两个不同的 key 对创建的,因此是两个单独的私钥。您可能只需要解密另一个 EncryptedKey .
    一般要解决这个问题:XML 加密或 XML enc 是 full standard ,并且您需要执行该标准或 - 通常推荐的内容 - use a library解密它。
    免责声明:我不隶属于所示图书馆,我对它的安全性没有任何意见。

    关于php openssl - RSA_padding_check_PKCS1_type_2 和 RSA_EAY_PRIVATE_DECRYPT :padding check failed:rsa_eay. c:602:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65495840/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com