2012-04-04 64 views
2

我在我的程序中使用了ml簽名來檢查消息是否已被篡改,並檢查它是否已由有效人員簽名。第二部分我明白了。問題在於第一部分,即檢查參考有效性。這是我正在使用的代碼。 xmldoc是一個包含xml封裝簽名的文檔對象。您可以看到valContext僅包含簽名元素和公鑰(這將需要驗證簽名)。您可以看到valContext只包含簽名元素和公鑰(這將需要驗證簽名)。但是在下面的代碼中,只有使用valContext對象才能看到該參考已驗證。這怎麼可能?爲了驗證參考,它需要訪問實際的xmldoc,從中可以提取<reference>中引用的元素,然後找到其值的散列/摘要並將其與<digest value>進行比較。
但不知何故,下面的代碼工作。我不知道如何?有人請解釋。xml簽名中的引用驗證

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); 
    } 

回答

2

甲DOM Node對象的元素不只是元件,它是作爲包含整個XML文檔中的元素。如果你看看Node interface documentation,你會注意到一種叫做getOwnerDocument()的方法。因此,從傳遞給DOMValidateContext對象的Node中,可以訪問整個XML文檔,因此可以訪問該文檔中您的Signature元素內引用的任何內容。