如何在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中使用密钥库来存储私钥?看完以上分享之后,大家应该都知道怎么去操作了吧。