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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值