通过 java 将 PKCS#1 格式的私钥转换为 PKCS#8 格式的私钥
Convert PKCS#1-formatted private key to PKCS#8-formatted private key by java
我有一个像这样的 PKCS#1 格式的私钥(由 opendkim-genkey 生成)
-----BEGIN RSA PRIVATE KEY-----
Base64 encoded data
-----END RSA PRIVATE KEY-----
现在我必须在Java中使用它来生成java.security.PrivateKey
但是Java只支持PKCS#8格式的私钥。
我知道有一种方法可以通过 Java(使用 Bouncycastle)将 PKCS#8 转换为 PKCS#1,但是无论如何可以通过 [=21= 从 PKCS#1 转换为 PKCS#8 ]?
免责声明:这个解决方案不是我自己想出来的,它是由 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();
}
我有一个像这样的 PKCS#1 格式的私钥(由 opendkim-genkey 生成)
-----BEGIN RSA PRIVATE KEY-----
Base64 encoded data
-----END RSA PRIVATE KEY-----
现在我必须在Java中使用它来生成java.security.PrivateKey
但是Java只支持PKCS#8格式的私钥。
我知道有一种方法可以通过 Java(使用 Bouncycastle)将 PKCS#8 转换为 PKCS#1,但是无论如何可以通过 [=21= 从 PKCS#1 转换为 PKCS#8 ]?
免责声明:这个解决方案不是我自己想出来的,它是由 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();
}