为什么KeyValue采用公钥?

时间:2013-02-06 18:30:38

标签: java key digital-signature keystore xml-signature

我正在尝试使用Java签署XML文档,我正在跟随此tutorial。我试图使用我的私钥来签署文档,但是当我查看API时,它说 KeyValue仅将PublicKey作为参数。在本教程中,它还让我使用私钥对DOMSignContext进行签名,然后使用公钥对XMLSignature进行签名。

DOMSignContext dsc = new DOMSignContext(kp.getPrivate(), doc.getDocumentElement()); 
KeyValue kv = kif.newKeyValue(kp.getPublic());
KeyInfo ki = kif.newKeyInfo(Collections.singletonList(kv)); 
XMLSignature signature = fac.newXMLSignature(si, ki); 

我认为私钥的重点是让人们信任你?为什么你需要公钥?有人可以在这里解释一下这里的细节吗?

1 个答案:

答案 0 :(得分:1)

通常,当有人想要验证/解密用私钥加密的内容时,必须知道相关的公钥(这是公钥/非对称加密的全部要点)。

XMLSignature上下文中,想要使用XMLSignature验证文档的人需要知道要使用的公钥;因此,为方便起见,公钥可以包含在XMLSignature结构中。

成功验证XMLSignature意味着可以相信自签名创建以来签名的数据未被修改。如果已知公钥与特定方相关联,则可以信任该方创建了签名。

如教程中所述,您仍需要使用以下方式“签名”签名:

signature.sign(dsc);