| VB 源码 | VC 源码 | ASP源码 | JSP源码 | PHP源码 | CGI源码 | FLASH源码 | 素材模板 | C 源程序 | 站长工具 | 站长教程 |

JSP技术

ASP技术
PHP技术
JSP技术
VB技术
.NET技术

本类阅读TOP10

·十个JavaScript页面布局技巧
·JSP编程进度条设计实例[4]
·第一章 熟悉JSP服务器
·JAVA程序的加密和反加密
·应用最广的十大Javascript框架
·在JAVA中编程实现数字签名系统
·Eclipse插件收集
·十个最著名的JavaScript 库
·JSP编程进度条设计实例[1]
·JSP编程进度条设计实例[3]

站内搜索

在JAVA中编程实现数字签名系统

    一个数字签名系统主要分为三个部分:
    1。生成密钥对
    2。在数据发送端对数据进行签名
    3。在数据接收端对数据进行校验数据签名
    下面从这三个方面分别说明:
    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签名数据文件,生成签名数据,并将签名数据写道文件中。

    //////VerifySign.java/////////////
    import java.io.*;
    import java.security.*;
    import java.security.spec.*;
    public class VerifySign{
    public static void main(String [] args)
    {
    if(args.length!=3){
    System.out.println("Usage:VerifySign <PublicKey> <dataFile> <SignatureFile>");
    System.out.println("Option:");
    System.out.println("<Public Key >The filename of the public key.");
    System.out.println("<DataFile>The filename that want to signature");
    System.out.println("<SignatureFile>:The file name containing signature data.");
    System.exit(0);
    }
    try{
    FileInputStream fileIn=new FileInputStream(args[0]);
    byte[] encodedpubKey =new byte[fileIn.available()];
    fileIn.read(encodedpubKey);
    fileIn.close();
    X509EncodedKeySpec pubKeySpec=
    new X509EncodedKeySpec(encodedpubKey);
    KeyFactory keyFactory=KeyFactory.getInstance("DSA");
    PublicKey pubKey=keyFactory.generatePublic(pubKeySpec);
    FileInputStream sigStream=new FileInputStream(args[2]);
    byte[] signature=new byte[sigStream.available()];
    sigStream.read(signature);
    sigStream.close();
    signature sigObj=Signature.getInstance("SHA1WithDSA");
    sigObj.initVerify(pubKey);
    fileIn=new FileInputStream(args[1]);
    byte b;
    while(fileIn.available())!=0)
    {
    b=(byte)fileIn.read();
    sigObj.update(b);
    };
    fileIn.close();
    boolean verifies=sigObj.verify(signature);
    System.out.println("Signature verifies:"+verifies);
    }catch(Exception e){/////////////
    }
    }
    }




相关文章
  • 阅读优秀代码是提高开发人员修为的一种捷径
  • 你是世界上最优秀的开发人员吗?
  • 计算机科学专业应该传授的三件事
  • 五个htaccess文件的常用技巧
  • Spring框架研究
  • 十四条实用的MySQL 查询语句
  • 十个JavaScript页面布局技巧
  • 十个最著名的JavaScript 库
  • PHP的新浪微博发信接口
  • 常见的开源软件许可证协议介绍
  • 开源软件许可证知识产权问题
  • 应用最广的十大Javascript框架
  • JAVA程序的加密和反加密
  • PHP开发框架的现状和展望
  • 网站标准重构的基础知识
  • Linux扫盲篇:CentOS、Ubuntu、Gentoo
  • 每个PHP开发者应该知道的五个开发要点
  • 如何在您的网站中加入“搜索本站功能”
  • 花十二个月建立一个成功的网站
  • 经典正则表达式
  • 相关软件

  • Photoshop中文教程
  • TURBO C教程  
  • CUG输入编缉,打字教程的C语言源程序  
  • C语言教程  
  • 功能强大的 TC 教程  
  • TURBO-C 教程的C语言源码  
  • 超级文本C++教程  
  • 操作符重载C++教程  
  • C 语言教程  
  • PHP中文教程  

  • 下载首页关于我们广告服务联系方式常见问题隐私声明法律条款本站声明下载帮助发布软件站点地图谷歌卫星地图