java安全架构____java DSA加密解密

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;
		}
		
	}
}

//

运行结果


//文件件内容


//


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值