网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
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,移动开发
本月文章推荐
.对象“友好的”访问.
.Line 属性.
.Struts开发指南之工作流程.
.Spring Framework标记库初学指南.
.毫无意义的Java基础类恶作剧.
.Java程序的性能优化StringBuffer.
.学编程的人不能不看的好文章(2).
.WEB开发技术比较报告.
.实现 Java 平台的三种方式.
.struts开发实践—分页的实现.
.如何成为java开发高手(mastering.
.使用Java实现数据报通讯过程.
.实现游戏中的文字滚屏功能.
.为Web应用建立基于JMX的管理系统.
.java基础知识——java入门与加深.
.2005年4月8日--正式开始我的Java.
.Ant使得JavaJARs打包变得简单和可.
.回击Ruby, Groovy on&.
.利用Eclipse开发Hibernate应用程.
.用SERVICE LOCATOR 模式实现命名.

如何在java中编程实现数字签名系统

发表日期:2008-1-5



  1。生成密钥对
  生成密钥对可用Java提供的类KeyPairGenerator,用其中的getInstance方法创建KeypairGenerator对象,在用initialize进行初始化,最后用generateKeyPair生成密钥对,密钥对生成后,就可以将其写入文件中。通过网络或其他方式公告用户,用户接收到数据文件和签名文件后,就可以使用公约来校验数据文件的数字签名,
  
  ;判定数据在网络中的传输是否被非法修改。
  ////GenerateKeyPair.java/////////////
  import java.io.*;
  import java.security.*;
  public class GenerateKeyPair{
  public static void main(String[] args){
  boolean bHelp=false;//sign for show help.
  FileOutputStream fileOut;//输出密钥到文件
  byte[] pubkey;//存储已编码的公钥字节
  byte[] privKey;//存储已编码的私钥字节
  if(args.length!=1){
  System.out.println("Usage:GenerateKeyPair <keyname>;
  System.out.println("Option:");
  System.out.println("<keyname>:The key name that using to genera
  te filename.");
  System.exit(0);
  }
  try{
  System.out.println("Generating a key pair.....");
  KeyPairGenarator keyGen=KeyPairGenerator.getInstance("DSA");//使用DSA算法
  KeyGen.initialize(1024,new SecureRandom());
  KeyPair pair=keyGen.generateKeyPair();
  PublicKey pub=pair.getPublic();
  PrivateKey priv=pair.getPrivate();
  pubkey=pub.getEncoded();
  privateKey= priv.getEncoded();
  fileOut=new FileOutputStream("PublicKey_"+args[0]);
  fileOut.write(pubKey);
  fileOut.close();
  fileOut=new FileOutputStream("privateKey_"+args[0]):
  fileOut.write(privateKey);
  file.out.close();
  System.out.println("OK!");
  }catch(Exception e){
  }
  }
  }
  }
  
  2.生成数字签名
  从私钥文件读取数据文件并将其转换为PrivateKey对象,可以使用KeyFactory类和PKCS8EncodeKeySpec类。KeyFactory可以利用给定的蜜月规范来建立不透明的密钥对象,也可以适当的格式取出蜜月对象中的密钥信息。 Signature是个引擎类,提供了诸如DSA或是RSA with MD5这样的数字签名算法。密
  码学上安全的签名算法可接受任意大小的输入和一个私月,并产生一个比较短的(经常是固定大小的)前名字揭穿。并且,签名和公钥部反映有关私钥的任何内容。Signature对象即可用于数据签名,也可用于校验某个签名是否为预制关联的数据的真实签名。
  
  签名或教研签名的第一步是创建signature实例,为特定类型的签名算法或取signature对象的途径是调用signature德getInstance静态方法
  初始化方法有两个,取决于Signature的用途:
  initSign(...)////用于签名
  initVerify(.....)//用于校验
  假如sigature初始化为签名,则可将带钱数据通过update方法提供给对象在调用sign来产生签名即可。
  下面以一个实例来说明。
  ///////////////////SignData.java////////////////
  import java.io.*;
  import java.security.*;
  import java.security.spec.*;
  public class SignData{
  public static void main(String [] args)
  {
  FileOutputStream fileOut;
  byte b;
  if(args.length!=3)
  {
  System.out.println("Usage:SignData <PrivateKey> <dataFile> <SignatureFile>");
  System.out.println("Option:");
  System.out.println("<PrivateKey>:The file name of the private Key.");
  System.out.println("<DataFile>: The filename that want to signature.");
  System.out.println("<signatureFile>:the filename containing signture data.");
  }
  try{
  System.out.println("Generating a digital signature....");
  FileInputStream fileIn=new FileInputStream(args[0]);
  byte[] encodedprivateKey=new byte[fileIn.available()];
  
  finleIn.read(encodedprivateKey);
  fileIn.close();
  
  PKCS8EncodeKeySpec privKeySpec=
  new PKCS8EncodeKeySpec(encodedprivateKey);
  KeyFactory keyFactory=KeyFactory.getInstance("DSA");
  PrivateKey privKey=keyFactory.generatePrivate(privateKeySpec);
  Signature dsa=Signature.getInstance("SHA/DSA");
  dsa.initSign(privKey);
  FileInputStream fis=new FileInputStream(args[1]);
  while(fis.available()!=0){
  b=(byte)fis.read();
  dsa.update(b);
  }
  fis.close();
  byte[] sig=dsa.sign();
  fileOut=new FileOutputStream(args[2]);
  fileOut.write(sig);
  fileOut.close();
  System.out.println("OK");
  }catch(Exception e){
  /////////
  }
  }
  }
  ///////////////////////End of SignData.java//////////////////
  SignData.java从文津中读取已编码的私钥字节,利用PKCS8EncodeKeySpec对象将已编码的四月字节转换为PrivateKey对象,然后利用Signature签名数据文件,生成签名数据,并将签名数据写道文件中。
上一篇:用JAVA得到硬盘空间的三种不同方法 人气:485
下一篇:在Java中使用反射分析类结构 人气:899
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐