岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Java >> 其他技术 >> Java正文
Java SE 6中XML数字签名标准Java接口
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-7-23 9:51:47
tion) 规定了 XML 数字签名规范的标准 Java 实现接口,于 2005 年 6 月 24 日最终发布。随后,于 2006 年秋季发布的 Java SE 6 (产品代号 Mustang) 将 JSR105 纳入 Java 标准库中,为基于 Java 的上层应用提供标准的 XML 数字签名支持。从此,需要使用 XML 安全特性的 Java 项目有了来自 Java 核心平台的基础支持,再也不需要为选择合适的第三方产品而烦恼。

3. 使用 Java SE 6生成 XML 数字签名并验证

    本节使用具体的程序例子介绍如何使用 Java SE 6中的标准 Java 接口生成各种格式的 XML 数字签名并进行验证。所有的程序例子都使用下表中的 XML 文档,其中主要包含有 Simon 和 Peter 二人的信用卡支付记录。


表 3 程序中使用的 XML 文档

                

 1.	<?xml version='1.0'?>

 2.	

 3.	<SalesData>

 4.	

 5.		<PaymentInfo xmlns="http://example.com/payment">

 6.		  <CustomerName>Simon</CustomerName>

 7.		  <Amount>25000</Amount>

 8.		  

 9.		  <CreditCardInfo>

10.		    <ID>4392 5649 8178 2315</ID>

11.		    <Issuer>CMB</Issuer>

12.		    <Expiration>06/2010</Expiration>

13.		    <Currency>USD</Currency>

14.		  </CreditCardInfo>

15.		</PaymentInfo>

16.		

17.		<PaymentInfo xmlns="http://example.com/payment" 

18.	                   id="PeterPayment">

19.		  <CustomerName>Peter</CustomerName>

20.		  <Amount>10000</Amount>

21.		  

22.		  <CreditCardInfo>

23.		    <ID>4392 5649 8178 2318</ID>

24.		    <Issuer>CMB</Issuer>

25.		    <Expiration>09/2015</Expiration>

26.		    <Currency>USD</Currency>

27.		  </CreditCardInfo>

28.		</PaymentInfo>

29.		

30.	</SalesData>

	

本节的程序基于 Java SE 6,请读者自行下载安装并配置开发环境。

3.1 生成并验证 Enveloped 格式的 XML 数字签名

Enveloped 格式的签名指签名元素包含于被签名数据中,如表 4 所示:


表 4 Enveloped格式的 XML 数字签名

                

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

 2.	<SignedData>

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

 4.	    ..............

 5.	  </Signature>

 6.	</SignedData>

 7.	..............

	

3.1.1 生成签名

1. 创建 XMLSignatureFactory 实例

XMLSignatureFactory 是与签名相关的 XML 元素对象的创建工厂。本文在这里创建以DOM 处理机制实现的 XMLSignatureFactory 实例:

2. 创建对整个 XML 文档的引用

这一步创建 <Reference> 元素,引用整个 XML 文档:

 1.	Transform envelopedTransform =

         fac.newTransform(Transform.ENVELOPED, TransformParameterSpec)null);

 2.	DigestMethod sha1DigMethod = fac.newDigestMethod(DigestMethod.SHA1, null);

 3.	Reference refToRootDoc = fac.newReference("", sha1DigMethod,

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

	

    创建 Reference 的时候将 URI 参数指定为 "" 表示对整个 XML 文档进行引用;摘要算法指定为 SHA1;这里将转换方式指定为 ENVELOPED ,这样在对整个文档进行引用并生成摘要值的时候,<Signature> 元素不会被计算在内。

 

上一页  [1] [2] [3] [4] [5] 下一页  

3. 创建 <SignedInfo> 元素

<Reference> 元素创建好之后,下一步是创建 <SignedInfo> 元素:

 1.	CanonicalizationMethod c14nWithCommentMethod =

      fac.newCanonicalizationMethod(

         Canonicaliz

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


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