如何在Java中使用密钥库来存储私钥?

来源:爱站网时间:2021-11-01编辑:网友分享
如何在Java中使用密钥库来存储私钥?这个问题你知道答案吗,不知道的朋友别着急,爱站技术小编今天用一篇文章告诉你去操作这些。有兴趣的朋友快过来看看。

如何在Java中使用密钥库来存储私钥?这个问题你知道答案吗,不知道的朋友别着急,爱站技术小编今天用一篇文章告诉你去操作这些。有兴趣的朋友快过来看看。

问题描述


我已使用KeyPairGenerator生成RSA密钥对。如果我没有记错,那么KeyStore仅用于存储证书,而不用于存储密钥。如何将私钥正确存储在计算机上?

解决方法:


注意:此代码仅用于演示目的。将私钥存储在磁盘上时,必须对其进行加密。不要按原样使用它。

您可以执行以下操作:

 KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
 kpg.initialize(2048);

 KeyPair kp = kpg.genKeyPair();

 KeyFactory fact = KeyFactory.getInstance("RSA");

 RSAPublicKeySpec pub = fact.getKeySpec(kp.getPublic(),
        RSAPublicKeySpec.class);
 saveToFile(PUBLIC_KEY_FILE, 
        pub.getModulus(), pub.getPublicExponent());

 RSAPrivateKeySpec priv = fact.getKeySpec(kp.getPrivate(),
        RSAPrivateKeySpec.class);
 saveToFile(PRIVATE_KEY_FILE, 
         priv.getModulus(), priv.getPrivateExponent());

保存功能:

private static void saveToFile(String fileName,
                               BigInteger mod, BigInteger exp) 
    throws SomeException {
    ObjectOutputStream oout = new ObjectOutputStream(
            new BufferedOutputStream(new FileOutputStream(fileName)));
    try {
        oout.writeObject(mod);
        oout.writeObject(exp);
    } catch (Exception e) {
        throw new SomeException(e);
    } finally {
        oout.close();
    }
}

并以相同的方式返回:

private static PublicKey readPublicKey() throws SomeException {
    InputStream in = new FileInputStream(PUBLIC_KEY_FILE);
    ObjectInputStream oin =
            new ObjectInputStream(new BufferedInputStream(in));
    try {
        BigInteger m = (BigInteger) oin.readObject();
        BigInteger e = (BigInteger) oin.readObject();
        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(m, e);
        KeyFactory fact = KeyFactory.getInstance("RSA");
        PublicKey pubKey = fact.generatePublic(keySpec);
        return pubKey;
    } catch (Exception e) {
        throw new SomeException(e);
    } finally {
        oin.close();
    }
}

读取私钥是相似的。

以上内容就是爱站技术频道小编为大家分享的如何在Java中使用密钥库来存储私钥?看完以上分享之后,大家应该都知道怎么去操作了吧。

上一篇:用于创建Web服务配置的Spring Boot CRUD操作是什么?

下一篇:怎样让LinkList节点跳过循环并移至下一个参数

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载