yexuejc-springboot/yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/test/KeyStoreHelper.java

78 lines
3.4 KiB
Java

package com.yexuejc.springboot.base.test;
import java.io.*;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.util.Base64;
/**
* 生成公钥工具; http://bijian1013.iteye.com/blog/2339874
*
* @ClassName: KeyStoreHelper
* @Description:
* @author: maxf
* @date: 2018/6/13 20:50
*/
public class KeyStoreHelper {
public static void main(String[] args) throws Exception {
String privatePath = "D:/testPri.key"; // 准备导出的私钥
String publicPath = "D:/testPub.key"; // 准备导出的公钥
KeyStoreHelper k = new KeyStoreHelper();
String privateKeyPath = k.getClass().getResource("/lgfishing.keystore").getFile().toString();
String publicKeyPath = k.getClass().getResource("/lgfishing.cer").getFile().toString();
// PrivateKey privateKey = getPrivateKeyFromStore(privateKeyPath);
// createKeyFile(privateKey, privatePath);
PublicKey publicKey = getPublicKeyFromCrt(publicKeyPath);
createKeyFile(publicKey, publicPath);
byte[] publicKeyBytes = publicKey.getEncoded();
// byte[] privateKeyBytes = privateKey.getEncoded();
String publicKeyBase64 = Base64.getEncoder().encodeToString(publicKeyBytes);
// String privateKeyBase64 = new BASE64Encoder().encode(privateKeyBytes);
System.out.println("publicKeyBase64.length():" + publicKeyBase64.length());
System.out.println("publicKeyBase64:" + publicKeyBase64);
// System.out.println("privateKeyBase64.length():" + privateKeyBase64.length());
// System.out.println("privateKeyBase64:" + privateKeyBase64);
}
private static PrivateKey getPrivateKeyFromStore(String storePathP) throws Exception {
String alias = "lgfishing"; // KeyTool中生成KeyStore时设置的alias
String storeType = "PKCS12"; // KeyTool中生成KeyStore时设置的storetype
char[] pw = "lgfishing2018".toCharArray(); // KeyTool中生成KeyStore时设置的storepass
String storePath = storePathP; // KeyTool中已生成的KeyStore文件
storeType = null == storeType ? KeyStore.getDefaultType() : storeType;
KeyStore keyStore = KeyStore.getInstance(storeType);
InputStream is = new FileInputStream(storePath);
keyStore.load(is, pw);
// 由密钥库获取密钥的两种方式
// KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias, new KeyStore.PasswordProtection(pw));
// return pkEntry.getPrivateKey();
return (PrivateKey) keyStore.getKey(alias, pw);
}
private static PublicKey getPublicKeyFromCrt(String crtPathP) throws CertificateException, FileNotFoundException {
String crtPath = crtPathP; // KeyTool中已生成的证书文件
CertificateFactory cf = CertificateFactory.getInstance("X.509");
FileInputStream in = new FileInputStream(crtPath);
Certificate crt = cf.generateCertificate(in);
PublicKey publicKey = crt.getPublicKey();
return publicKey;
}
private static void createKeyFile(Object key, String filePath) throws Exception {
FileOutputStream fos = new FileOutputStream(filePath);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(key);
oos.flush();
oos.close();
}
}