gpt4 book ai didi

java - xml 签名中的引用验证

转载 作者:行者123 更新时间:2023-11-30 09:38:42 25 4
gpt4 key购买 nike

我在我的程序中使用 ml 签名来检查消息是否已被篡改并检查它是否已由有效人员签名。第二部分我明白了。问题出在第一部分,即检查引用有效性。这是我正在使用的代码。 xmldoc是包含 xml 封装签名的文档对象。

 NodeList nl = xmldoc.getElementsByTagNameNS
(XMLSignature.XMLNS, "Signature");

DOMValidateContext valContext = new DOMValidateContext
(pbk1, nl.item(0));

如您所见,valContext 仅包含签名元素和公钥(验证签名需要用到)。但在下面的代码中,您只能通过使用 valContext 才能看到对象,引用被验证。这怎么可能?为了验证引用,它需要访问实际的 xmldoc,从中可以提取 <reference> 中引用的元素。然后找到其值的散列/摘要并将它们与 <digest value> 进行比较.
但不知何故下面的代码有效。我不知道怎么办?有人请解释。

Iterator i =
signature1.getSignedInfo().getReferences().iterator();
for (int j=0; i.hasNext(); j++) {
boolean refValid = ((Reference)
i.next()).validate(valContext);
System.out.println("ref["+j+"] validity status: " +
refValid);
}

最佳答案

元素的 DOM Node 对象不仅仅是元素,它还是包含在整个 XML 文档中的元素。如果您查看 Node interface documentation ,您会注意到一个名为 getOwnerDocument() 的方法。因此,从传递给 DOMValidateContext 对象的 Node 中,可以访问整个 XML 文档,因此可以访问该文档中在 中引用的任何内容code>Signature 元素。

关于java - xml 签名中的引用验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10005034/

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