将签名添加到没有“id”的XML元素

时间:2016-12-28 17:54:58

标签: java xml java-ee sign java-security

我需要签署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>`

任何建议?

提前致谢!!!

1 个答案:

答案 0 :(得分:0)

你有没有像孩子一样尝试过的东西?下面的代码不会解决您的问题,因为它将返回一个空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);