JcaPEMWriter 可以生成 PKCS#8 输出吗?

Can JcaPEMWriter generate PKCS#8 output?

以下代码使用 BouncyCastle 中的 JcaPEMWriter class 以 PKCS#1 格式 (-----BEGIN RSA PRIVATE KEY-----) 输出随机生成的 RSA 私钥:

public static void main(String[] args) throws Exception {
    final KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
    kpg.initialize(2048, null);
    final KeyPair kp = kpg.generateKeyPair();
    final PrivateKey privateKey = kp.getPrivate();
    final StringWriter s = new StringWriter();
    try (JcaPEMWriter w = new JcaPEMWriter(s)) {
        w.writeObject(privateKey);
    }
    System.out.println(s);
}

有什么方法可以让 JcaPEMWriter 输出 PKCS#8 格式 (-----BEGIN PRIVATE KEY-----) 吗?

您需要为 PEMWriter 提供一个稍微不同的对象,即 JcaPKCS8Generator。以下应该有效

try (JcaPEMWriter w = new JcaPEMWriter(s)) {
    w.writeObject(new JcaPKCS8Generator(privateKey, null));
}