我在微软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
有什么建议吗?
答案 0 :(得分:0)
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 Widgets挖掘XML数字签名。
签名/对象
- 我第一次看到API似乎很容易。我刚刚创建了XMLObject
,如上所述。
但是,正如规范所说,我必须插入一个Reference
来引用由{1}创建的{1}}。
- 什么?如何引用输出节点参考?
- 如何返回甚至尚未创建的节点数据?
我意识到我应该准备一个XMLObject
包含org.w3c.dom.Document
元素(及其子目的)并将其用作参考。
- &GT;使用<Object>
,您可以从此文档的getDocumentElement()结果中返回URIDereferencer
。
所以这就是解决方案。
NodeSetData
元素的org.w3c.dom.Document
实例作为其根元素。您可以根据需要添加任何属性和子元素。<Object>
方案。检查一下。这是我找到解决方案的地方。我认为你的问题将得到解决 http://today.java.net/pub/a/today/2006/11/21/xml-signature-with-jsr-105.html#generate-an-enveloping-signature
抱歉我的英语不好。我是韩国人。 :)
我最诚挚的问候。 金权