我有一个带有加密元素的xml文档,我需要解密。从下面的xml和我读过的关于xmlenc的内容来看,这个元素使用AES256-CBC加密,发送方生成一个对称密钥(加密数据在第二个CipherValue元素中)。然后,发件人使用RSA加密AES密钥。发件人应使用我的公钥进行此RSA加密。加密密钥放在下面xml中的第一个CipherValue中。
因此要解密数据,我必须执行以下操作: 1. Base64解码然后使用我的RSA私钥解密AES密钥,该私钥对应于发送方使用的公共RSA密钥。 2.基于64解码,然后使用步骤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>
谢谢, 特洛伊