PKI相關知識-003:從KeyStore獲取密鑰對

需求

使用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

發佈了18 篇原創文章 · 獲贊 4 · 訪問量 5383
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章