【问题标题】:Convert PKCS#1-formatted private key to PKCS#8-formatted private key by java通过java将PKCS#1格式的私钥转换为PKCS#8格式的私钥
【发布时间】:2018-05-09 10:00:53
【问题描述】:

我有一个像这样的 PKCS#1 格式的私钥(由 opendkim-genkey 生成)

-----BEGIN RSA PRIVATE KEY-----

Base64 encoded data

-----END RSA PRIVATE KEY-----

现在我必须在 Java 中使用它来生成 java.security.PrivateKey

但 Java 只支持 PKCS#8 格式的私钥。

我知道有一种方法可以通过 Java 将 PKCS#8 转换为 PKCS#1(使用 Bouncycastle),但是有没有办法通过 Java 将 PKCS#1 转换为 PKCS#8?

【问题讨论】:

  • 您可以使用 openssl 和 openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in pkcs1.key -out pkcs8.key 之类的命令来执行此操作。比较here
  • 谢谢,我知道我可以使用 openssl 命令行来完成。但是我要问的是无论如何我们都可以通过java来做到这一点。
  • 为什么?当您重新键入时,您只需每隔几年执行一次此过程。当现有实用程序已经正确执行时,为什么还要编写新的 Java 代码?

标签: java private-key pkcs#1 pkcs#8


【解决方案1】:

免责声明:这个解决方案不是我自己想出来的,它是由 marcoscottwright 在 github 上写的。 Find the original code here


如果你有一个PrivateKey k 对象,你可以使用 BouncyCastle 来做到这一点。

try (ASN1InputStream asn1InputStream = new ASN1InputStream(k.getEncoded()))
{
    DERObject rsaPrivateKey = asn1InputStream.readObject();
    return new PrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption), rsaPrivateKey).getDEREncoded();
}

【讨论】:

  • 这只是答案的一半。 OP 没有PrivateKey 对象,他有 PKCS#1 格式的 RSA 私钥在文件中
猜你喜欢
  • 2016-11-01
  • 1970-01-01
  • 2018-08-04
  • 2016-09-30
  • 2023-03-20
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
相关资源
最近更新 更多