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

级别: 中级

孙 瑛霖, 软件工程师, IBM 中国软件开发实验室 SOA设计中心

2007 年 4 月 16 日

    XML 数字签名技术用于对 XML 格式的数据进行数字签名,以保证报文的完整性,不可否认性,以及提供身份认证信息。JSR 105 提供了 XML 数字签名的 Java 接口,而最近发布的 Java SE 6 则包括了 JSR 105的 实现,从而为基于 Java 的应用程序提供了标准的 XML 数字签名接口。本文首先简要介绍技术背景,以实例来讲解 XML 数字签名的语法和处理规则,之后用具体的程序例子解释如何使用 Java SE 6 生成各种格式的 XML 数字签名并进行验证。

1. 技术背景

1.1 数字签名简介

    数字签名是非对称密钥技术的一种应用模式,用于保证报文的完整性,不可否认性,以及提供身份认证信息。数字签名的原理如图 1 所示。


图 1:数字签名的原理
数字签名的原理

    发送者在发送报文之前,先选用某种摘要算法为报文生成一个摘要值,并使用自己的私钥对摘要值加密,然后将加密后的摘要附在报文后面,一同发送给报文的接收者。接收者收到报文后,从中分离出原始报文和加密后的报文摘要,使用与发送者相同的摘要算法计算原始报文的摘要值 D,并使用发送者的公共密钥将加密后的报文摘要解密得到摘要值 D’,检查 DD’ 是否匹配。

    如果匹配,那么由于密钥对的唯一性,所以可以确定报文发送者的身份,而且由于数据摘要算法的特点,还可以确定原始报文在传输过程中没有被篡改。

1.2 XML 数字签名简介

    XML 发展至今,已经逐渐成为标准的数据描述技术,在分布式应用中广泛地用于数据的交换。由于 XML 数据本身的特殊性和使用 XML 进行数据传输的分布式应用的特点,在对 XML 文档的特定部分进行签名,多方签名,以及签名后保持 XML 文档原有的良构特性等诸多方面,传统的数字签名技术都无法很好地实现。

    基于这样的问题,W3C 组织制订了 XML 数字签名规范,规定了标准的 XML 数字签名语法和处理规则。同传统意义的数字签名相比,XML 数字签名能够对 XML 文档进行细粒度地分析,支持多种方式的文档数据转换,只对文档的特定部分进行签名和验证,并且能够保持 XML 文档的良构特性。此外,XML 数字签名提供的密钥信息表示方法清晰易读,更加便于签名的自动验证处理。

1.3 XML 数字签名实例

本节用一个简单的例子来介绍 XML 数字签名的语法和处理规则。


表 1签名前的 XML 文档
                

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

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

 3.	  <CustomerName>Peter</CustomerName>

 4.	  <Amount>10000</Amount>



 5.	  <CreditCardInfo>

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

 7.	    <Issuer>CMB</Issuer>

 8.	    <Expiration>06/2010</Expiration>

 9.	    <Currency>USD</Currency>

10.	  </CreditCardInfo>

11.	</PaymentInfo>

	

    表 1 中的 XML 文档描述了 Peter 的信用卡支付记录。在按照 XML 数字签名规范对整个文档签名之后,生成的 XML 文档如表 2 所示:


表 2 签名后的 XML 文档
                

 1.	<?xml version="1.0" encoding="UTF-8" standalone="no"?>

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

 3.	  <CustomerName>Peter</CustomerName>

 4.	  <Amount>10000</Amount>

 5.	  <CreditCardInfo>

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

 7.	    <Issuer>CMB</Issuer>

 8.	    <Expiration>06/2010</Expiration>

 9.	    <Currency>USD</Currency>

10.	  </CreditCardInfo>



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

12.	    <SignedInfo>

13.	      <CanonicalizationMethod  

  Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>

14.	      <SignatureMethod

            Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/>

15.	      <Reference URI="">

16.	        <Transforms>

17.	          <Transform 

   Algorithm="http://www.w3.or

[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 传世私服 传奇世界私服