通过java将PKCS#1格式的私钥转换为PKCS#8格式的私钥
我有一个PKCS#1格式的私钥(由opendkim genkey生成),如下所示通过java将PKCS#1格式的私钥转换为PKCS#8格式的私钥,java,private-key,pkcs#1,pkcs#8,Java,Private Key,Pkcs#1,Pkcs#8,我有一个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,但是有没有办法通过Jav
-----BEGIN RSA PRIVATE KEY-----
Base64 encoded data
-----END RSA PRIVATE KEY-----
现在我必须在Java中使用它来生成Java.security.PrivateKey
但是Java只支持PKCS#8格式的私钥
我知道有一种方法可以通过Java(使用Bouncycastle)将PKCS#8转换为PKCS#1,但是有没有办法通过Java将PKCS#1转换为PKCS#8?免责声明:我自己没有想到这个解决方案,它是由Marcoscottw在github编写的
如果您有一个
PrivateKey k
对象,则可以使用BouncyCastle执行此操作
try (ASN1InputStream asn1InputStream = new ASN1InputStream(k.getEncoded()))
{
DERObject rsaPrivateKey = asn1InputStream.readObject();
return new PrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption), rsaPrivateKey).getDEREncoded();
}
您可以使用openssl和类似于
openssl pkcs8-topk8-inform-PEM-outform PEM-nocrypt-in-pkcs1.key-out pkcs8.key的命令来完成此操作。比较一下,谢谢,我知道我可以使用openssl命令行。但我要问的是,无论如何,我们可以用java来实现。为什么?你只需要每隔几年在关键时刻做一次这个过程。为什么要在现有实用程序已经正确运行的情况下编写新的Java代码呢?这只是半个答案。OP没有PrivateKey
对象,他在文件中有PKCS#1格式的RSA私钥。