我有一个包含需要解密的加密元素的 xml 文档。从下面的 xml 和我读到的关于 xmlenc 的内容,这个元素是使用 AES256-CBC 加密的,发送者生成的对称密钥(加密数据在第二个 CipherValue 元素中)。然后,发送者使用 RSA 加密了 AES 密钥。发件人应使用我的公钥来执行此 RSA 加密。加密的密钥放在下面 xml 中的第一个 CipherValue 中。
因此,要解密数据,我必须执行以下操作: 1. Base64 解码然后使用我的 RSA 私钥解密 AES 密钥,该密钥对应于发送者使用的我的公共 RSA 密钥。2. Based64 解码,然后使用步骤 1 中解密的 AES 密钥对第二个 CipherValue 元素中的加密数据进行解密。
这个对吗?
现在,这是我的问题……我没有给发件人我的公钥。相反,发件人给了我一个包含他们的公钥的证书,他们声称我可以使用它们进行解密 - 我猜这暗示他们用他们的私钥加密,所以我可以用他们的公钥解密。从我读过的所有内容来看,这不是它的工作方式。相反,他们应该用我的公钥加密,这样我就可以用我的私钥解密数据。
谁是正确的?可以用私钥加密然后用公钥解密吗?
对于它的价值,我尝试使用 JCE 执行此操作,但是当我尝试使用他们的公钥解密 AES 密钥(第一个 base64 解码)时,我得到了一个 BadPadding 异常。
这是 XML 元素减去一些细节......
<xenc:EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<e:EncryptedKey xmlns:e="http://www.w3.org/2001/04/xmlenc#">
<e:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p">
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
</e:EncryptionMethod>
<KeyInfo>
<X509Data>
<X509IssuerSerial>
<X509IssuerName> // issuer name removed </X509IssuerName>
<X509SerialNumber>11411601377033481249</X509SerialNumber>
</X509IssuerSerial>
</X509Data>
</KeyInfo>
<e:CipherData>
<e:CipherValue>
LLq+NfgwVF/qbMzTPtVnGfaaBxIFc5fmNeAk2dBHaPqb+Hti9Nre7dK+3MOyzucNSYwF76Be0zKZnIeAsQQoKgiU34/BZURq9uFHt8uUYA4dPtcYOIg6F5KR3r7KXBilT/QXYP3UicIcsY2NCA6g0Mp4PrF8b2Yi80Gn2oyZd30=
</e:CipherValue>
</e:CipherData>
</e:EncryptedKey>
</KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>
// encrypted data removed
</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
谢谢,特洛伊