需求
使用Keytool生成.keystore
文件,从KeyStore
里面获取KeyPair
,并打印base64的公私钥。
生成的.keystore
文件的密码为:123456
,别名为:aliasName
。
代码
获取KeyStore中KeyPair的方法:
public static KeyPair getKeyPairFromKeyStore(KeyStore keyStore, String alias, char[] password) {
try {
Key key = keyStore.getKey(alias, password);
if (key instanceof PrivateKey) {
Certificate cert = keyStore.getCertificate(alias);
PublicKey publicKey = cert.getPublicKey();
return new KeyPair(publicKey, (PrivateKey)key);
}
} catch (Exception e) {
System.out.println("KeyStore获取KeyPair出错");
e.printStackTrace();
}
return null;
}
main方法如下:
public static void main(String[] args) {
try {
char[] password = "123456".toCharArray();
FileInputStream fis = new FileInputStream("D:/keytools_cert/test.keystore");
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(fis, password);
//获取KeyPair
KeyPair keyPair = getKeyPairFromKeyStore(keyStore, "aliasName", password);
PrivateKey privateKey = keyPair.getPrivate();
PublicKey publicKey = keyPair.getPublic();
//公私钥转化为base64打印控制台
System.out.println("privateKey:\n" + Base64.getEncoder().encodeToString(privateKey.getEncoded()));
System.out.println("publicKey:\n" + Base64.getEncoder().encodeToString(publicKey.getEncoded()));
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
说明
先将文件转化为FileInputStream
,然后用KeyStore
的实例去加载;
getKeyPairFromKeyStore
方法里面,私钥是通过:Key key = keyStore.getKey(alias, password);
取到的,公钥是通过:Certificate cert = keyStore.getCertificate(alias);
得到证书,然后从证书中获取公钥:PublicKey publicKey = cert.getPublicKey();
。最后返回KeyPair
。