java 加密算法 DSA 实现代码
package
com.yill;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyPair;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Signature;
import java.security.SignatureException;
import sun.security.provider.DSAKeyPairGenerator;
public class YillDSA
{
public static void main(String[] args)
{
byte[] myInfo = "http://www.blogjava.net/yill/".getBytes();
byte[] wrongInfo = "http://www.blogjava.net/yill".getBytes();
System.out.println("My info is " + new String(myInfo));
generateKeyPair();
byte[] signature = generateSignature(myInfo);
System.out.println("The signature is " + new String(signature));
System.out.println("Verify result is "
+ verifySignature(myInfo, signature));
System.out.println("Verify result of wrong info is "
+ verifySignature(wrongInfo, signature));
}
public static void generateKeyPair()
{
DSAKeyPairGenerator kg = new DSAKeyPairGenerator();
kg.initialize(1024, false, new SecureRandom());
KeyPair keyPair = kg.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
writeKeyToDisk("C:\\privateKeyDSA.dat", privateKey);
PublicKey publicKey = keyPair.getPublic();
writeKeyToDisk("C:\\publicKeyDSA.dat", publicKey);
}
public static byte[] generateSignature(byte[] info)
{
try
{
PrivateKey privateKey = (PrivateKey) readKeyFromDisk("C:\\privateKeyDSA.dat");
Signature sign = Signature.getInstance("DSA");
sign.initSign(privateKey);
sign.update(info);
return sign.sign();
}
catch (NoSuchAlgorithmException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InvalidKeyException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SignatureException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return new byte[0];
}
public static boolean verifySignature(byte[] info, byte[] signature)
{
PublicKey publicKey = (PublicKey) readKeyFromDisk("C:\\publicKeyDSA.dat");
Signature sign;
try
{
sign = Signature.getInstance("DSA");
sign.initVerify(publicKey);
sign.update(info);
return sign.verify(signature);
}
catch (NoSuchAlgorithmException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InvalidKeyException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SignatureException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
private static void writeKeyToDisk(String file, Key key)
{
try
{
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream(file));
out.writeObject(key);
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static Key readKeyFromDisk(String file)
{
try
{
ObjectInputStream in = new ObjectInputStream(new FileInputStream(
file));
return (Key) in.readObject();
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyPair;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Signature;
import java.security.SignatureException;
import sun.security.provider.DSAKeyPairGenerator;
public class YillDSA
{
public static void main(String[] args)
{
byte[] myInfo = "http://www.blogjava.net/yill/".getBytes();
byte[] wrongInfo = "http://www.blogjava.net/yill".getBytes();
System.out.println("My info is " + new String(myInfo));
generateKeyPair();
byte[] signature = generateSignature(myInfo);
System.out.println("The signature is " + new String(signature));
System.out.println("Verify result is "
+ verifySignature(myInfo, signature));
System.out.println("Verify result of wrong info is "
+ verifySignature(wrongInfo, signature));
}
public static void generateKeyPair()
{
DSAKeyPairGenerator kg = new DSAKeyPairGenerator();
kg.initialize(1024, false, new SecureRandom());
KeyPair keyPair = kg.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
writeKeyToDisk("C:\\privateKeyDSA.dat", privateKey);
PublicKey publicKey = keyPair.getPublic();
writeKeyToDisk("C:\\publicKeyDSA.dat", publicKey);
}
public static byte[] generateSignature(byte[] info)
{
try
{
PrivateKey privateKey = (PrivateKey) readKeyFromDisk("C:\\privateKeyDSA.dat");
Signature sign = Signature.getInstance("DSA");
sign.initSign(privateKey);
sign.update(info);
return sign.sign();
}
catch (NoSuchAlgorithmException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InvalidKeyException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SignatureException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return new byte[0];
}
public static boolean verifySignature(byte[] info, byte[] signature)
{
PublicKey publicKey = (PublicKey) readKeyFromDisk("C:\\publicKeyDSA.dat");
Signature sign;
try
{
sign = Signature.getInstance("DSA");
sign.initVerify(publicKey);
sign.update(info);
return sign.verify(signature);
}
catch (NoSuchAlgorithmException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InvalidKeyException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SignatureException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
private static void writeKeyToDisk(String file, Key key)
{
try
{
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream(file));
out.writeObject(key);
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static Key readKeyFromDisk(String file)
{
try
{
ObjectInputStream in = new ObjectInputStream(new FileInputStream(
file));
return (Key) in.readObject();
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}