在没有 "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);
我需要签署一份 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);