首页 > 编程语言 >java安全架构____java 秘钥对生成

java安全架构____java 秘钥对生成

时间:2023-09-13 15:36:07浏览次数:33  
标签:outputStreamWriter String import UTF 秘钥 ____ new java


import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.util.UUID;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

// 生成一对文件 publicKey.key 和 privateKey.key ,
// 公钥要用户发送 ( 文件 , 网络等方法 ) 给其它用户 , 私钥保存在本地
public class PiPuKeyPairs {
	public static void main(String[] args) {
		//getGeneralKeyPairs();
		String seed=UUID.randomUUID().toString();
		getSeSeedKeyPairs(seed);
	}

	public static boolean getGeneralKeyPairs() {
		try {
			// 初始化签名秘钥
			KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA");
			keyPairGenerator.initialize(512);
			// 初始化公私秘钥对
			KeyPair keyPair = keyPairGenerator.genKeyPair();
			// 获取公钥
			PublicKey publicKey = keyPair.getPublic();
			// 获取私钥
			PrivateKey privateKey = keyPair.getPrivate();
			
			// 生产公钥文件UTF-8格式字符串
			OutputStreamWriter outputStreamWriter_pub = new OutputStreamWriter(new FileOutputStream("publicKey.key"), "UTF-8");
				outputStreamWriter_pub.write(encodeBase64(publicKey.toString()));
				outputStreamWriter_pub.close();
			System.out.println("公钥:\n" + encodeBase64(publicKey.toString()));
				
			// 生产公钥文件UTF-8格式字符串
			OutputStreamWriter outputStreamWriter_pri = new OutputStreamWriter(new FileOutputStream("privateKey.key"), "UTF-8");
				outputStreamWriter_pri.write(encodeBase64(privateKey.toString()));
				outputStreamWriter_pri.close();
			System.out.println("私钥:\n" + encodeBase64(privateKey.toString()));
			
			//生成
			System.out.println("秘钥对生成完成.....");
		return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
	/**
	 * 自定义种子生成策略
	 * @param seed
	 * @return
	 */
	public static boolean getSeSeedKeyPairs(String seed) {
		try {
			// 初始化签名秘钥
			KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA");
			
			 SecureRandom secureRandom=new SecureRandom();
			 	secureRandom.setSeed(seed.getBytes());
			 keyPairGenerator.initialize(512,secureRandom);
			// 初始化公私秘钥对
			KeyPair keyPair = keyPairGenerator.genKeyPair();
			// 获取公钥
			PublicKey publicKey = keyPair.getPublic();
			// 获取私钥
			PrivateKey privateKey = keyPair.getPrivate();
			
			// 生产公钥文件UTF-8格式字符串
			OutputStreamWriter outputStreamWriter_pub = new OutputStreamWriter(new FileOutputStream("publicKey2.key"), "UTF-8");
				outputStreamWriter_pub.write(encodeBase64(publicKey.toString()));
				outputStreamWriter_pub.close();
			System.out.println("公钥:\n" + encodeBase64(publicKey.toString()));
				
			// 生产公钥文件UTF-8格式字符串
			OutputStreamWriter outputStreamWriter_pri = new OutputStreamWriter(new FileOutputStream("privateKey2.key"), "UTF-8");
				outputStreamWriter_pri.write(encodeBase64(privateKey.toString()));
				outputStreamWriter_pri.close();
			System.out.println("\n私钥:\n" + encodeBase64(privateKey.toString()));
			
			//生成
			System.out.println("\n 秘钥对生成完成.....");
		return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
	
	// 对字符密码加密
	public static String encodeBase64(String str) throws Exception {
		// 1.将传递进来的字符串密码 转换为字节数组 放到base64加密工具里 生产出一个加了密的字符串
		String base64Str = new BASE64Encoder().encode(str.getBytes("UTF-8"));
		return base64Str;
	}

	// 对密文字符串解密
	public static String decodeBase64(String base64Str) throws Exception {
		// 根据加了密的字符串 使用base64的解密工具里 获取原来的明文字符串密码
		byte[] bytes = new BASE64Decoder().decodeBuffer(base64Str);
		String generalStr = new String(bytes, "UTF-8");
		return generalStr;
	}

}

//运行结果

java安全架构____java 秘钥对生成_base64


//文件

java安全架构____java 秘钥对生成_java加密算法_02

//文件

java安全架构____java 秘钥对生成_java公钥_03


标签:outputStreamWriter,String,import,UTF,秘钥,____,new,java
From: https://blog.51cto.com/ratelcloud/7455514

相关文章

  • java安全架构____java Base64加密
    packagecom.security.base64;importsun.misc.BASE64Decoder;importsun.misc.BASE64Encoder;/***@infojavabase64最简单的理解和使用*@authorGodbase64算法是java最基础的加密算法将字符串类型密码转为加密后的字符串理解原理后可自己配置算法规则到更坚固的......
  • 聊城注册商标应该使用公司名义还是个人名义
    聊城注册商标应该使用公司名义还是个人名义恒标知产刘经理15266872201 首先,以个人(自然人)名义注册商标是可行的,但是以自然人身份注册商标就需要满足以下几个条件之一:  (1)个体工商户;  (2)农村承包经营户;  (3)其他依法获准从事经营活动的自然人。 其实公司商标与个人商标没有太多区......
  • java安全架构____java HMAC加密
    packagecom.security.hmac;importsun.misc.BASE64Decoder;importsun.misc.BASE64Encoder;importjavax.crypto.KeyGenerator;importjavax.crypto.Mac;importjavax.crypto.SecretKey;importjavax.crypto.spec.SecretKeySpec;/***@authorAdministrator*h......
  • java安全架构____java SHA加密
    packagecom.security.sha;importjava.security.MessageDigest;/***@authorAdministrator*sha加密推荐先*/publicclassSha{ publicstaticvoidmain(String[]args)throwsException{ System.out.println("简单的sha加密__:"+shaEncode("12345......
  • (随笔)记录MP update()无法置空字段的问题
    问题在code编写的时候有遇到需求,即保存或更新操作之前需要对reason和medication_receipt字段进行清空操作,确保一条数据中这两个字段不能同时有值,由于是Springboot+MybatpisPlus的框架,因此第一反应是通过mp的update方法进行更新操作。for(FollowupPapRecordDetailfollowupPapR......
  • java安全架构____java MD5加密
    packagecom.security.md5;importjava.security.MessageDigest;/***@authormd5**/publicclassMd5{ publicstaticvoidmain(String[]args)throwsException{ System.out.println("简单md5加密____:"+md5Encode("123456")); //避免不同......
  • dubbo分布式项目开发____配置经验和心得
    //1.zookeeper配置文件中不要出现中文会报错 //2.分布式开发对象一定要序列化//摘抄如下在面向对象程序语言中做分布式计算的时候,经常需要将对象在不同的主机之间传输,我这次在实现分布式计算的时候,需要将一个计算对象从中央服务器Server分发给所有的客户端client。通过......
  • Flask基础入门到精通之flask准备和路由
    一、前言Flask诞生于2010年,是Arminronacher(阿明·罗纳彻)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如......
  • dubbo分布式项目开发____dubbo控制台管理
    //1.将dubbo-admin放到tomcat下自行解压修改dubbo.properties文件结构如下为了避免冲突如用到多个tomcat时修改端口号即可8080  其他8081...2..3..4等//从命名下war包的名称不带版本号放到tomcat下解压出来的就不带版本号了//启动tomcat访问这个项目我个人用的是8081单独......
  • 《VUE》走马灯组件
    <template><!--走马灯--><divclass="box"><divclass="carousel"><divclass="item"v-for="(v,i)inlist":key="i"@click="open(v)"><img:sr......