网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
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,移动开发
本月文章推荐
.现在应该考 SCJP 1.2 还是 SCJP .
.“javax.microedition.io.Connec.
.为 Web 服务构建 Struts 应用程序.
.Java调试教程--使用JDB进行调试.
.java设计模式---prototype(原型).
.共享内存在Java中的实现和应用.
.Sun Java System Access Manager.
.整合SE J2ME SDK与eclipse开发环.
.新手学堂:几个著名Java开源缓存.
.Project JXTA 中对等管道的构建.
.Java数据库接口JDBC基础教程之驱.
.SCSA认证全面介绍.
.java编辑多语言的福音--推荐一个.
.Java新消息:JRuby将集Java和RoR.
.超越梦想 EJB 3.0规范全新体验.
.toTimeString 方法.
.Java Servlet API说明文档(2.1a.
.Eclipse开发工具使用指南.
.JakartaStruts简介(一).
.如何使用动态代理实现AOP功能.

在Jini,RMI和Applet中如何实现代码签名

发表日期:2008-1-5



  第一段代码:生成公开/私有密钥对并在命令行中指定文件,把密钥对写入该文件.
  import Java.security.*;
  import java.io.*;
  public class KeyPairGen
  {
  public static void main(String[] args)
  {
  if(args.length!=1)
  {
  System.out.println("Usage: java KeyPairGen KeyFile");
  System.exit(1);
  }
  KeyPairGen obj=new KeyPairGen();
  try{
  obj.gen(args[0]);
  }catch(NoSUChAlgorithmException ex)
  {
  System.out.println("NoSuchAlgorithmException");
  }
  catch(FileNotFoundException ex)
  {
  System.out.println("FileNotFoundException");
  }
  catch(IOException ex)
  {
  System.out.println("IOException");
  }
  }
  public void gen(String source) throws NoSuchAlgorithmException,
  FileNotFoundException,IOException
  {
  KeyPairGenerator kpGen=KeyPairGenerator.getInstance("DSA");
  kpGen.initialize(512);
  KeyPair kPair=kpGen.genKeyPair();
  FileOutputStream fos=new FileOutputStream(source);
  ObjectOutputStream oos=new ObjectOutputStream(fos);
  oos.writeObject(kPair);
  fos.close();
  oos.close();
  }
  }
  第二段代码,命令行中指定存放密钥的文件,用于签名的字符串(这里使用字符串只是为了简单,其实在真正实际使用中应该换成用MD5或SHA1算法计算某一文件流的消息摘要值)和签名所存放的文件.功能是计算出签名并把该签名存放在文件中.
  import java.security.*;
  import java.io.*;
  public class SignGen
  {
  public static void main(String[] args)
  {
  if(args.length!=3)
  {
  System.out.println("Usage: java SignGen KeyFile String SigFile");
  System.exit(1);
  }
  SignGen obj=new SignGen();
  try{
  obj.genSignature(args[0],args[1],args[2]);
  }catch(NoSuchAlgorithmException ex)
  {
  System.out.println("NoSuchAlgorithmException");
  }
  catch(InvalidKeyException ex)
  {
  System.out.println("InvalidKeyException");
  }
  catch(SignatureException ex)
  {
  System.out.println("SignatureException");
  }
  catch(ClassNotFoundException ex)
  {
  System.out.println("ClassNotFoundException");
  }
  catch(FileNotFoundException ex)
  {
  System.out.println("FileNotFoundException");
  }
  catch(IOException ex)
  {
  System.out.println("IOException");
  }
  }
  public void genSignature(String keyFile,String str,String sigFile)
  throws NoSuchAlgorithmException,InvalidKeyException,SignatureException,
  ClassNotFoundException,FileNotFoundException,IOException
  {
  FileInputStream fis=new FileInputStream(keyFile);
  ObjectInputStream ois=new ObjectInputStream(fis);
  KeyPair kp=(KeyPair)ois.readObject();
  PublicKey pubKey=kp.getPublic();
  PrivateKey priKey=kp.getPrivate();
  fis.close();
  ois.close();
  Signature sig=Signature.getInstance("SHA1WithDSA");
  sig.initSign(priKey);
  sig.update(str.getBytes());
  byte[] b=sig.sign();
  FileOutputStream fos=new FileOutputStream(sigFile);
  ObjectOutputStream oos=new ObjectOutputStream(fos);
  oos.writeObject(b);
  fos.close();
  oos.close();
  }
  }
  第三段代码当然是用于验证签名了.命令行中指定三个参数.密钥文件,更新验证的字符串和签名文件.
  import java.security.*;
  import java.io.*;
  public class SignVerify
  {
  public static void main(String[] args)
  {
  if(args.length!=3)
  {
  System.out.println("Usage: java SignVerify KeyFile String SigFile");
  System.exit(1);
  }
  SignVerify obj=new SignVerify();
  try{
  obj.verify(args[0],args[1],args[2]);
  }catch(NoSuchAlgorithmException ex)
  {
  System.out.println("NoSuchAlgorithmException");
  }
  catch(InvalidKeyException ex)
  {
  System.out.println("InvalidKeyException");
  }
  catch(SignatureException ex)
  {
  System.out.println("SignatureException");
  }
  catch(ClassNotFoundException ex)
  {
  System.out.println("ClassNotFoundException");
  }
  catch(FileNotFoundException ex)
  {
  System.out.println("FileNotFoundException");
  }
  catch(IOException ex)
  {
  System.out.println("IOException");
  }
  }
  public void verify(String keyFile,String str,String sigFile) throws
  NoSuchAlgorithmException,InvalidKeyException,SignatureException,
  ClassNotFoundException,FileNotFoundException,IOException
  {
  FileInputStream fis=new FileInputStream(keyFile);
  ObjectInputStream ois=new ObjectInputStream(fis);
  KeyPair kp=(KeyPair)ois.readObject();
  PublicKey pubKey=kp.getPublic();
  PrivateKey priKey=kp.getPrivate();
  fis.close();
  ois.close();
  FileInputStream fis1=new FileInputStream(sigFile);
  ObjectInputStream ois1=new ObjectInputStream(fis1);
  byte[] b=(byte[])ois1.readObject();
  fis1.close();
  ois1.close();
  Signature sig=Signature.getInstance("SHA1WithDSA");
  sig.initVerify(pubKey);
  sig.update(str.getBytes());
  if(sig.verify(b))
  {
  System.out.println("Verify OK!");
  }
  else
  {
  System.out.println("Verify Error!");
  }
  }
  }
  在验证过程中,密钥对,字符串和签名一个都不能错,否则无法通过验证.
上一篇:applet在IE浏览器中不能显示的解决方案 人气:1242
下一篇:applet 的参数化 -- 对数组进行初始化 人气:739
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐