Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过java将PKCS#1格式的私钥转换为PKCS#8格式的私钥_Java_Private Key_Pkcs#1_Pkcs#8 - Fatal编程技术网

通过java将PKCS#1格式的私钥转换为PKCS#8格式的私钥

通过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

我有一个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,但是有没有办法通过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私钥。