在没有 "id" 的情况下将签名添加到 XML 元素

Add Signature to XML element without "id"

我需要签署一份 XML 文件。但是,要签名的 XML 元素没有 ID。有没有办法通过标签名添加签名?

像这样:

   `<father>
       <child>element to sign, without "id" </child>
      <I need the signature here></I need the signature here>
    </father>`

我明白我的问题出在这句话:

Reference ref = fac.newReference("", fac.newDigestMethod(
      DigestMethod.SHA1, null), Collections.singletonList(fac
            .newTransform(Transform.ENVELOPED,
                    (TransformParameterSpec) null)), null, null);

我这样试过:

Reference ref = fac.newReference("#child", fac.newDigestMethod(
      DigestMethod.SHA1, null), Collections.singletonList(fac
            .newTransform(Transform.ENVELOPED,
                    (TransformParameterSpec) null)), null, null);

但这会引发异常,因为它没有找到元素,第一个选项有效但签名被添加到 xml 文件的末尾:

   `<father>
       <child>element to sign, without "id" </child>
    </father>
    <Signature></Signature>`

有什么推荐吗?

提前致谢!!!

你试过像child only这样的东西吗?下面的代码不会解决您的问题,因为它将 return 一个空的 id,但它可以作为灵感。例如,尝试在 newReference 函数中将 el 作为引用传递。

elements = doc.getElementsByTagName(tag);  
Element el = (Element) elements.item(0);  
String id = el.getAttribute("Id");  

//Reference ref = fac.newReference("".concat(id), fac.newDigestMethod(DigestMethod.SHA1, null), transformList, null, null);  
Reference ref = fac.newReference("#" + id, fac.newDigestMethod(DigestMethod.SHA1, null), transformList, null, null);