您的位置:首页 > 编程语言 > Java开发

数字签名示例程序 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();
}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐