需求
使用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
。