数字签名示例程序 Java编写
2009-03-31 21:38
253 查看
数字签名示例程序 Java编写
package com.eos.lighting.java.test; import java.security.KeyPair; import java.security.PrivateKey; import java.security.PublicKey; public class TestDS { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub TestDS test=new TestDS(); test.run(); } public void run() { if((new java.io.File("myprikey.dat")).exists()==false) { if(generateKey()==false) { return; } } try { java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.FileInputStream("myprikey.dat")); PrivateKey myprikey=(PrivateKey)in.readObject(); in.close(); //java.security.spec.X509EncodedKeySpec pubX509=new java.security.spec.X509EncodedKeySpec(); String myinfo="这是我的信息这是我的信息这是我的信息这是我的信息这是我的信息这是我的信息这是我的信息这是我的信息这是我的信息这是我的信息这是我的信息"; java.security.Signature signet=java.security.Signature.getInstance("DSA"); signet.initSign(myprikey); signet.update(myinfo.getBytes()); byte[] signed=signet.sign(); System.out.println("signed(签名内容)= "+this.byte2hex(signed)); //把信息和数字签名保存在一个文件中 java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("myinfo.dat")); out.writeObject(myinfo); out.writeObject(signed); out.close(); System.out.println("签名并生成文件成功"); } catch(Exception e) { e.printStackTrace(); } //其它人通过公共方式得到此户的公钥和文件 try{ java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.FileInputStream("mypubkey.dat")); PublicKey pubkey=(PublicKey)in.readObject(); in.close(); System.out.println(pubkey.getFormat()); in=new java.io.ObjectInputStream(new java.io.FileInputStream("myinfo.dat")); String info=(String)in.readObject(); byte[] signed=(byte[])in.readObject(); in.close(); java.security.Signature signetcheck=java.security.Signature.getInstance("DSA"); signetcheck.initVerify(pubkey); signetcheck.update(info.getBytes()); if(signetcheck.verify(signed)) { System.out.println("info = "+info); System.out.println("签名正常"); } else System.out.println("非签名正常"); } catch(Exception e) { e.printStackTrace(); } } public boolean generateKey() { try { java.security.KeyPairGenerator keygen=java.security.KeyPairGenerator.getInstance("DSA"); keygen.initialize(1024); KeyPair keys=keygen.genKeyPair(); PublicKey pubkey=keys.getPublic(); PrivateKey prikey=keys.getPrivate(); java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("myprikey.dat")); out.writeObject(prikey); out.close(); System.out.println("写入对象 prikeys ok"); out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("mypubkey.dat")); out.writeObject(pubkey); out.close(); System.out.println("写入对象 pubkeys od"); System.out.println("生成密钥对成功"); return true; } catch(Exception e) { e.printStackTrace(); System.out.println("生成密钥对失败"); return false; } //return true; } public String byte2hex(byte[] b) { String hs=""; String stmp=""; for(int n=0;n<b.length;n++) { stmp=(java.lang.Integer.toHexString(b & 0XFF)); if(stmp.length()==1) hs=hs+'0'+stmp; else hs=hs+stmp; if(n<b.length-1) hs=hs+':'; } return hs.toUpperCase(); } } |
相关文章推荐
- 数字签名示例程序 Java编写
- 模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数字,求和之后输出结果。
- 2. 编写一个Java应用程序,用户从键盘输入一个1~9999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、32
- 编写一个Java应用程序。用户从键盘输入一个1—9999之间的数,程序将判断这个数是几位数, 并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同, 例如12121、3
- 编写Java程序,计算数字可以被哪些数字整除。
- 用java编写spark程序,简单示例及运行
- 笔试题——编写java程序:输入一个字符串,判断有几个英文字母,有几个数字,有几个其它的字符
- 用java编写spark程序,简单示例及运行
- 使用 R 语言 编写 删除java文件中 每行 前面的 数字 的程序
- 使用JAVA实现签名验证示例程序
- java-信息安全(六)-基于RSA理解数字签名示例
- 编写Java程序,将能够被13整除的前400个数字存储到数组中
- Java练习题-编写程序,打印1到100之内的整数,但数字中包含7的要跳过
- java 编写程序实现从控制台接收一个 5 位以上的整数,使用数组来判断该数字 * 是否是回文数。(例如:789987,12344321是回文数)
- Java加密解密和数字签名完整代码示例
- 用java编写在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100
- SHA-1和MD5示例程序 Java编写
- 编写一个Java应用程序。用户从键盘输入一个1—9999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、3223都
- 用myeclipse如何编写java程序
- 编写高质量代码:改善Java程序的151个建议 勘误 [不断更新]