岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Java >> 其他技术 >> Java正文
Java SE 6中XML数字签名标准Java接口
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-7-23 9:51:47
fo> 元素中,这里使用 XMLSignature 对象的接口取出公钥。

5. 创建DOMValidateContext(行24 - 行25)

    在验证签名的过程中,需要创建 DOMValidateContext 对象来指定上下文信息,参数为前面获取到的验证公钥和 <Signature> 元素。

6. 验证签名(行27 - 行28)

    验证签名所需的所有信息都已就绪,开始使用XMLSignature 对象提供的接口进行验证。

7. 检查验证结果(行30 - 行46)

    如果签名验证失败,则分别对 <Reference> 元素的签名值和其中的每一个引用进行验证,进一步确定导致验证失败的原因。如果签名值验证成功,而某个引用验证失败,则说明是该引用新生成的摘要值与原文档中的摘要值不匹配导致验证失败。

以签名后生成的 XML 文档作为输入,执行验证程序,从程序的输出信息可以判断出验证成功:

Signature passed core validation	

	

    接下来将包含有 <Signature> 元素的待验证文档作一点改动,把 Peter 的支付信息中的金额改为 60000 美元,再次执行程序进行验证,则验证失败:

Core validation failed

Signature validation status: true

Reference[0] validity status: false

	

    输出信息提示签名值验证成功,而对整个文档的引用验证失败。签名值验证成功是因为 <SignedInfo> 没有改动,对文档的引用验证失败是因为前面修改了文档中的数据。

3.2 生成并验证Enveloping格式的签名

Enveloping 格式的签名指 <Signature> 元素包含着被签名的数据内容,如表 6 所示:


表 6 Enveloping 格式的数字签名

                

 1.	..............

 2.	<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">

 3.	    ..............

 4.	    <SignedData>

 5.	        ..............

 6.	    </SignedData>

 7.	</Signature>

 8.  ..............

	

在 Enveloping 格式的数字签名中,待签名的 XML 内容需要通过 URI 或者 Transform 进行引用。

3.2.1 生成签名

 1.	// Create XMLObject refering to Simon's payment info  

 2.	DocumentBuilderFactory dbf =

 3.	    DocumentBuilderFactory.newInstance();

 4.	dbf.setNamespaceAware(true);

 5.	Document origDoc = 

 6.	dbf.newDocumentBuilder().parse(new FileInputStream(inputFile));

 7.	Element docEle = origDoc.getDocumentElement();

 8.	Node simonPayment = 

 9.	    docEle.getElementsByTagName("PaymentInfo").item(0);

10.	XMLStructure content = new DOMStructure(simonPayment);

11.	XMLObject xmlObj = 

12.	    fac.newXMLObject(Collections.singletonList(content),     

13.	                        "SimonPayment", null, null);

14.	

15.	// Create the reference to element to be signed

16.	Reference ref = fac.newReference("#SimonPayment", 

fac.newDigestMethod(DigestMethod.SHA1, null));



...... ......



17.	XMLSignature signature = fac.newXMLSignature(si, ki,

		    Collections.singletonList(xmlObj), null, null);

	

    为了引用待签名的内容,首先查找到 Simon 的支付记录对应的 DOM 元素,使用 XMLStructure 对其进行包装,然后生成 XMLObject ,并为其指定 id"SimonPayment"。随后在创建 Referenc 的时候,同样指定引用 id"SimonPayment"。在创建 XMLSignature 对象的时候将待签名的 XMLObject 作为参数,这些 XMLObject 包含的 XML 内容将会成为 <Signature> 元素的子元素,从而创建出 Enveloping 格式的签名。程序的其他部分与生成 Enveloped 格式的数字签名相同。

签名之后生成的 <Signature> 元素如下:

 1.	<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">

 2.	 <SignedInfo>

 3.	   <CanonicalizationMethod 

 4.	Algorithm="http://www.w3.o

上一页  [1] [2] [3] [4] [5] [6] [7] [8] 下一页


  • 上一个Java:
  • 下一个Java:
  •  
    热门文章
    推荐文章
    关于我们 | 发展历程 | 网站地图 | 广告服务 | 招贤纳士 | 战略合作 | 友情链接 | 著作声明 | 联系我们
    Copyright © 2002-2007 SYUE All rights reserved.
    E_mail:Admin@Syue.Com 皖ICP备05004589号
    未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
    传世私服 传奇世界私服 天龙八部私服 bet365 传世私服 天龙八部私服 热血江湖私服 英雄合击传奇私服 热血江湖私服 bet365 bet365