Java如何使用私钥文件而不是PEM来解密?

2024-05-01

使用 Java 和 Bouncy Castle 1.52,我可以使用以下代码通过 PEM 证书加载私钥。我还有一个相同的 PKCS8 格式的 private.key 文件。直接使用private.key文件而不是PEM的代码是什么?

String keyPath = "C:\\RSA7\\privatenopass.pem";
BufferedReader br = new BufferedReader(new FileReader(keyPath));
PEMParser pp = new PEMParser(br);
PEMKeyPair pemKeyPair = (PEMKeyPair) pp.readObject();
KeyPair kp = new JcaPEMKeyConverter().getKeyPair(pemKeyPair);
pp.close();
cipher.init(Cipher.DECRYPT_MODE, kp.getPrivate());

这很简单,因为 Java 本身已经使用 PKCS#8 编码来编码 RSA 私钥。

请注意,此示例仅使用内部编码PKCS#8。 PKCS#8 密钥实际上由分层结构组成(内部编码指示被包装的密钥类型,外部编码指示所使用的包装机制)。

它还使用 Java 7/8 中的一些便捷方法从文件中读取字节。您可以将其替换为任何代码以从文件中读取所有字节。

Path path = (new File("privatenopass.pkcs8")).toPath();
byte[] pkcs8Data = Files.readAllBytes(path);
KeyFactory kf = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec keyspec = new PKCS8EncodedKeySpec(pkcs8Data);
RSAPrivateKey pk = (RSAPrivateKey) kf.generatePrivate(keyspec);

您直接将文件读取器提供给 Bouncy Castle 来解码 PEM。但在这种情况下,您必须自己执行流处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java如何使用私钥文件而不是PEM来解密? 的相关文章

随机推荐