网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.一个显示日期的简单小程序,主要是.
.实 现JAVA 的 动 态 类 载 入 机.
.将一图片同比例缩小绘制.
.《Java编程思想》(第二版)第07章.
.Weblogic的结构特点.
.为什么用 “==” 与 “equal”得.
.Struts的动态表单的应用.
.Java 2005回顾&2006展望.
.J2EE体系结构设计(1).
.在Java applet中如何显示另外一个.
.使用web.xml控制Web应用的行为二.
.Java 6.0 操作脚本语言基础.
.Resin服务器下的中文乱码解决方案.
.Rational为由设计直接生成代码努.
.Java性能优化技巧集锦(2).
.Java Script的应用技巧.
.Java更新XML的四种常用方法简介(.
.SUN力推Java数据对象标准展示倡导.
.Java思路 开发易于移植的J2ME游戏.
.Java中常见的异常.

JavaSE 6基于JSR105的XML签名之实践篇

发表日期:2008-1-5



  在上篇(【理论篇】)中,我们分析了有关基于JSR-105进行XML签名的基本概念。在本篇中,我们开始分析一个实际的XML签名示例应用程序。

  一、 密码学密钥和证书

  现在,我们已经预备好我们的XML签名示例应用程序。

  让我们首先分析下列XML文档-./etc/invoice.xml:

<?XML version="1.0" encoding="UTF-8" standalone="no"?>
<invoice XMLns="http://www.company.com/accounting">
<items>
 <item>
  <desc>Applied Cryptography</desc>
  <type>book</type>
  <unitprice>44.50</unitprice>
  <quantity>1</quantity>
 </item>
</items>
<creditcard>
 <number>123456789</number>
 <eXPiry>10/20/2009</expiry>
 <lastname>John</lastname>
 <firstname>Smith</firstname>
</creditcard>
</invoice>
  我们计划使用一个XML签名对它进行签名并且希望使用一个基于一个公共密钥的签名方法。

  让我们先生成密码学密钥。为此,我们可以使用JDK中提供的keytool工具-把该程序移动到./etc文件夹下,并且执行下列命令:

keytool -genkey -keysize 512 -sigalg DSA -dname "cn=Young Yang, ou=Architecture, o=Company, L=New York, ST=NY, c=US" -alias biz -keypass kp1234 -keystore bizkeystore -storepass sp1234 -validity 180
  这个命令能够创建密钥并预以存储-名字为bizkeystore,存储在工作目录./etc下,并且指定它的口令为sp1234。它还生成一个针对实体(它包含有一个卓著的名字-Young Yang)的公有/私有密钥对。【注重】,这里使用DSA密钥生成算法来创建公有/私有密钥-都为512位长。
上面的命令进一步创建了一个自签名的证书,这是使用SHA1的DSA算法(JSR-105注释中的DSA_SHA1,其中包括了公共密钥和前面那个卓闻名字信息)实现的。这个证书将保持180天的有效期并且关联与一个密钥存储文件(此处引用的别名为"biz")中的私有密钥。该私有密钥被赋予口令kp1234。

  我们的示例中包括一个简单的Java类-KeyStoreInfo,用于把存储于前面的密钥存储文件中的密钥和证书信息输出到System.out;这个类也用于应用程序从中取得密钥对-这里的私有和公共密钥匹配作为输入参数指定的条件。为了试验它能够输出包含在前面存储文件bizkeystore中的信息,读者可以运行Ant目标ksInfo。

  下列代码片断显示KeyStoreInfo中的用来检索一个KeyPair的方法:

public static KeyPair getKeyPair(String store,String sPass,String kPass,String alias)
throws CertificateException,
IOException,
UnrecoverableKeyException,
KeyStoreException,
NoSUChAlgorithmException{
 KeyStore ks = loadKeyStore(store,sPass);
 KeyPair keyPair = null;
 Key key = null;
 PublicKey publicKey = null;
 PrivateKey privateKey = null;
 if (ks.containsAlias(alias)){
  key = ks.getKey(alias,kPass.toCharArray());
  if (key instanceof PrivateKey){
   Certificate cert = ks.getCertificate(alias);
   publicKey = cert.getPublicKey();
   privateKey = (PrivateKey)key;
   return new KeyPair(publicKey,privateKey);
  }else{
   return null;
  }
 } else {
  return null;
 }
}
  借助于一个KeyPair,我们可以轻易地得到PrivateKey和PublicKey-通过调用相应的操作getPrivate()和getPublic()实现。

  为了从KeyStore中得到一个PublicKey,我们并不真正需要在上面的方法中所要求的密钥口令,而这正是下列方法所实现的:


上一篇:HIbernate的参数使用说明 人气:658
下一篇:OJB中的多条件查询 人气:697
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐