java安全架构____java DSA加密解密

来源:互联网 发布:最全的外文数据库 编辑:程序博客网 时间:2024/05/28 20:19
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.PublicKey;import java.security.Signature;// 生成一对文件 publicKey.key 和 privateKey.key ,// 公钥要用户发送 ( 文件 , 网络等方法 ) 给其它用户 , 私钥保存在本地/** * @author Administrator * 1.生成秘钥对 * 2.使用私钥进行签名 * 3.使用公钥校验签名 * 意义上的加密解密 非内容型的加密解密 */public class DSA {public static void main(String[] args) {//初始化秘钥对写入到文件 生成的是X.509编码格式的 生成的私钥是PKCS#8编码格式getKeyPairs();//明文签名SignatureData("我是张三是我的账号0001");//校验签名文件checkSignature();}/** * 生成秘钥对写入到文件 * @return */public static boolean getKeyPairs() {try {//初始化秘钥管理器KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA");keyPairGenerator.initialize(512);KeyPair keyPair = keyPairGenerator.genKeyPair();//获取秘钥对PublicKey publicKey = keyPair.getPublic();PrivateKey privateKey = keyPair.getPrivate();//直接写入公钥ObjectOutputStream out_pub = new ObjectOutputStream(new FileOutputStream("publicKey.key"));out_pub.writeObject(publicKey);out_pub.close();System.out.println("生成的公钥内容为_____:\n "+publicKey);//直接写入私钥ObjectOutputStream out_pri = new ObjectOutputStream(new FileOutputStream("privateKey.key"));out_pri.writeObject(privateKey);out_pri.close();System.out.println("生成的私钥内容为_____:\n "+privateKey);System.out.println("\n生成密钥对成功...");return true;} catch (java.lang.Exception e) {e.printStackTrace();return false;}}/** * 使用私钥进行签名 * @return */public static boolean SignatureData(String  info){try {//1.读取生成的私钥对明文进行签名ObjectInputStream in_pri = new ObjectInputStream(new java.io.FileInputStream("privateKey.key"));PrivateKey privateKey = (PrivateKey) in_pri.readObject();in_pri.close();//初始化签名 对明文开始签名Signature signature = Signature.getInstance("DSA");signature.initSign(privateKey);signature.update(info.getBytes());// 对信息的数字签名byte[] signedbytes = signature.sign();System.out.println("签名为_____:"+signedbytes);//把签名的密文存到文件中ObjectOutputStream out_signature =new ObjectOutputStream(new FileOutputStream("signature.data"));//把明文和签名一起写入 也可以分别写入    out_signature.writeObject(info);out_signature.writeObject(signedbytes);out_signature.close();System.out.println("秘钥签名完成.......");} catch (Exception e) {e.printStackTrace();System.out.println("私钥签名失败....");}return false;}/** * 用公钥进行校验 * @return */public static boolean checkSignature(){try {//读取公钥ObjectInputStream in_pub=new ObjectInputStream(new FileInputStream("publicKey.key"));PublicKey publicKey = (PublicKey) in_pub.readObject();//读取签名文件ObjectInputStream in_signature=new ObjectInputStream(new FileInputStream("signature.data"));//读取签名信息String info = (String) in_signature.readObject();//用公钥进行校验byte[] signedbytes = (byte[]) in_signature.readObject();Signature signature = Signature.getInstance("DSA");signature.initVerify(publicKey);signature.update(info.getBytes());//签名信息校验if (signature.verify(signedbytes)) {System.out.println("签名的内容为____:" + info);System.out.println("签名文件校验正常....");return true;} else{System.out.println("签名校验失败");return false;}} catch (Exception e) {e.printStackTrace();return false;}}}

//

运行结果


//文件件内容


//


1 0