不支持Flash
|
|
|
JavaSE 6基于JSR105的XML签名之实践篇(3)http://www.sina.com.cn 2007年01月11日 08:56 天极yesky
【步骤3】加载invoice.xml并且用一个XMLObject对象把它包装起来。注意,并非所有的签名生成过程都要求这个步骤。XMLObject在JSR-105中对于我们以前简短地讨论过的可选的Object元素进行建模。该Object元素具有下列模式定义:
XMLSignatureFactory提供下列方法来创建一个XMLObject实例: public abstract XMLObject newXMLObject(List content, String id,String mimeType,String encoding) 我们使用一个DOMStructure对象来包装invoice.xml的根结点。在JSR-105中定义的DOMStructure可以帮助从原始待签名的XML文档中把结点导入到JSR-105运行时刻。 我们指定#invoice作为结果对象元素的id。JSR-105实现知道在步骤2中创建的引用对象参考invoice.xml文档,因为这个id把它们链接在一起(在Reference一边,URI属性指向这个id)。 【步骤4】创建SignedInfo对象。在W3C建议中,SignedInfo元素具有下列模式定义:
为了创建一个SignedInfo对象,我们需要在〖步骤2〗中创建的Reference;我们还需要两个实例-一个是CanonicalizationMethod的实例,另一个是SignatureMethod的实例。我们建议感兴趣的读者参考一下规范说明书从而对这四种XML规范算法有一个更为精确的了解;在此,我们只是简单地指出,在我们决定选择一个特定的算法-alg后,后面对XMLSignatureFactory的一个实例(即fac)的调用将会创建CanonicalizationMethod的实例:
我们可以创建一个SignatureMethod实例-通过调用下列在XMLSigantureFactory中定义的操作:
在我们的示例中,我们拥有一个DSA类型密钥对;因此,我们需要选择一个基于DSA的算法-例如DSA_SHA1。对于DSA-SHA1,我们可以把params参数设置为null。 为了创建一个SignedInfo实例,XMLSignatureFactory定义了如下两个工厂方法:
在第二个工厂方法中的第二个参数-id响应于XML签名文档中的SignedInfo元素的Id属性。
【发表评论】
|