我正在执行一个关于microsoft office文件(docx、xlsx、pptx)上的数字签名的java项目。
我可以使用以下方法创建一个对象,该对象将添加到xml签名中:
XMLSignatureFactory xml_fac = XMLSignatureFactory.newInstance("DOM");
XMLObject xml_object = XMLSignatureFactory.newXMLObject(...
ArrayList<XMLObject> obj_list = new ArrayList<XMLObject>();
obj_list.add(xml_object);
XMLSignature xml_sig = xml_fac.newXMLSignature(...,...,obj_list,...但是,这个由java生成的xml签名不包含xmlns类型的XMLObject
microsoft office要识别此xml对象:
<Object>
<SignatureProperties>
<SignatureProperty Id="idSignatureTime" Target="#idPackageSignature">
<mdssi:SignatureTime>
<mdssi:Format>YYYY-MM-DDThh:mm:ssTZD</mdssi:Format>
<mdssi:Value>2011-04-02T10:10:10Z</mdssi:Value>
</mdssi:SignatureTime>
</SignatureProperty>
</SignatureProperties>
</Object>我必须补充:
xmlns:mdssi="http://schemas.openxmlformats.org/package/2006/digital-signature"进入开始的<Object>标记
但是java中的XMLObject无法添加这一点,它只有Id、MimeType、Encoding和Content。
有什么建议吗?
发布于 2011-05-10 11:52:00
SignatureProperty property = XML_SIGNATURE_FACTORY.newSignatureProperty(
...);
SignatureProperties properties = XML_SIGNATURE_FACTORY.newSignatureProperties(
Collections.singletonList(property), ...);
XMLObject object = XML_SIGNATURE_FACTORY.newXMLObject(
Collections.singletonList(properties), ...);第2版:
故事来了。我用Java。(JSR-105)我正在挖掘W3C部件的。
用于签名/对象的
--我第一次看到这些API似乎很容易我刚刚创建了像上面这样的XMLObject。
XMLObject的Reference。--什么?如何引用输出节点?
--我如何返回尚未创建的节点的数据?
<Object>元素(及其子元素)的org.w3c.dom.Document,并将其用作引用。->使用URIDereferencer,您可以从文档的getDocumentElement()结果返回一个NodeSetData。
所以解决办法来了。
<Object>元素的org.w3c.dom.Document实例作为其根元素。您可以根据自己的意愿添加任何属性和子元素。enveloping方案。。
看看这个。这就是我找到解决办法的地方。我想你的问题会解决的。
http://today.java.net/pub/a/today/2006/11/21/xml-signature-with-jsr-105.html#generate-an-enveloping-signature
为我糟糕的英语感到抱歉。我是韩国人。:)
我向你问好。金权
https://stackoverflow.com/questions/5522512
复制相似问题