Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java xml签名中的引用验证_Java_Xml_Xml Signature - Fatal编程技术网

Java xml签名中的引用验证

Java xml签名中的引用验证,java,xml,xml-signature,Java,Xml,Xml Signature,我在我的程序中使用ml签名来检查消息是否被篡改,并检查消息是否由有效的人签名。第二部分我明白了。问题在于第一部分,即检查参考有效性。这是我正在使用的代码xmldoc是包含xml信封签名的文档对象 NodeList nl = xmldoc.getElementsByTagNameNS (XMLSignature.XMLNS, "Signature"); DOMValidateContext valContext = new DOMValidateContext

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

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

    DOMValidateContext valContext = new DOMValidateContext
      (pbk1, nl.item(0)); 
正如您所看到的,valContext只包含signature元素和公钥(这是验证签名所必需的)。但是在下面的代码中,您可以看到,只有通过使用
valContext
对象,引用才会被验证。这怎么可能?要验证引用,它需要访问实际的xmldoc,从中可以提取
中引用的元素,然后找到其值的哈希/摘要,并与
进行比较
但不知何故,下面的代码是有效的。我不知道怎么做?请有人解释一下

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
节点
对象不仅仅是元素,它是整个XML文档中包含的元素。如果查看,您会注意到一个名为
getOwnerDocument()
的方法。因此,从传递给
DOMValidateContext
对象的
节点
可以访问整个XML文档,从而访问
签名
元素中引用的文档中的任何内容