CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

您现在的位置: IT专家网 > Web服务子站 > 技巧

Java SE 6中XML数字签名标准Java接口

作者: 孙 瑛霖,  出处:developerWorks 中国 , 责任编辑: 叶江, 
2007-04-18 13:00
  本文首先简要介绍技术背景,以实例来讲解 XML 数字签名的语法和处理规则,之后用具体的程序例子解释如何使用 Java SE 6 生成各种格式的 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.org/2000/09/xmldsig#enveloped-signature"/>
18.         </Transforms>
19.         <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
20.         <DigestValue>9gETxLIm1huTZtMkmGlybtZWa5g=</DigestValue>
21.       </Reference>
22.     </SignedInfo>

23.     <SignatureValue>
OIFpnZmeGt+tOywzTgrcYBje/04uGmGIrbZYYxxXj4jsBdq+0JwZ1A==
</SignatureValue>

24.  <KeyInfo>
25.   <KeyValue>
26.     <DSAKeyValue>
27.    <P>
28.      /KaCzo4Syrom78z3EQ5SbbB4sF7ey80etKII864WF64
29.      B81uRpH5t9jQTxeEu0ImbzRMqzVDZkVG9xD7nN1kuFw==
30.    </P>
31.    <Q>li7dzDacuo67Jg7mtqEm2TRuOMU=</Q>
32.    <G>
33.      Z4Rxsnqc9E7pGknFFH2xqaryRPBaQ01khpMdLRQnG
34.      541Awtx/XPaF5Bpsy4pNWMOHCBiNU0NogpsQW5QvnlMpA==
35.    </G>
36.    <Y>
37.      NMxkCcO6Hdd146qBJ4FQGPpz8IncS8onBPshqlxsd
38.      pAqgM2lgn8kCPHqfO7jLx7NPZwHeDtHLfKKSYg+Ln6Xzw==
39.    </Y>
40.     </DSAKeyValue>
41.   </KeyValue>
42.  </KeyInfo>
43.   </Signature>

44. </PaymentInfo>

  所有与 XML 数字签名相关的信息都存放在 <Signature> 元素中。<Signature> 元素包含有几个主要的子元素:

  •   <Reference> 元素至少包含一个 <Reference> 元素,每个 <Reference> 元素用于对待签名数据进行引用,包含有引用方式、转换方法、摘要算法和摘要值等信息
  •   <Reference> 还包含有 XML 数据的规则化方法,并指定了数字签名所使用的算法。
  •   <SignatureValue> 元素包含对 <Reference> 元素规范化后的内容进行签名生成的数字签名的值。
  •   <KeyInfo> 元素用于指定验证签名所需的公共密钥相关信息。

  XML 数字签名的过程大致为:

  1. 根据每个 <Reference> 元素中指定的资源引用方式,摘要算法,数据转换方法等信息,对引用资源进行转换,然后对转换后的结果计算出摘要值。

  2. 根据 <SignedInfo> 元素中指定的 XML 数据的规范化方法对 <SignedInfo> 规则化,对规范化之后的数据生成摘要值,并使用私钥对摘要值进行加密,将生成的加密摘要值存放在 <SignatureValue> 元素中。

……

共2页。 9 1 2

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅

       
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i