您的位置:首页 > 运维架构 > 网站架构

java安全架构____java 秘钥对生成

2017-02-25 18:49 477 查看
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;
}

}

//运行结果



//文件



//文件

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