java - 为什么 KeyValue 采用公钥?

标签 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); 

我认为私钥的全部意义在于让人们信任你?为什么这里的任何东西都需要公钥?有人可以为我更好地解释一下这里的细节吗?

最佳答案

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

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

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

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

signature.sign(dsc); 

关于java - 为什么 KeyValue 采用公钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14736222/

相关文章:

php - 如何使用 PHP 向任何文件添加数字签名(RSA、证书等)?

java - ActionBar 后退按钮从内部 Fragment 完成 Activity

Java Applet 大小行为与 JFrame 大小行为

java - 事务和捕获 block

c# - 如何根据注释 [key] 标记从 ASP NET MVC 模型对象中识别主键参数?

javascript - 从对象中删除特定键

java - Eclipse 插件的跨项目版本控制

python - 将随机值设置为字典的一半并复制其余部分

ios - 验证 RSA 签名 iOS

digital-signature - 来自使用 java 的数字签名电子 token 的 keystore