当前位置: 首页 > 面试题库 >

如何从RSA Privatekey.pem文件中获取java.security.PrivateKey对象?

丁阳羽
2023-03-14
问题内容

我有一个RSA私钥文件(OCkey.pem)。使用Java我必须从该文件中获取私钥。该密钥是使用以下openssl命令生成的。注意:我无法在下面的此openssl命令上进行任何更改。

openssl> req -newkey rsa:1024 -sha1 -keyout OCkey.pem -out OCreq.pem -subj "/C=country/L=city/O=OC/OU=myLab/CN=OCserverName/" -config req.conf

证书如下所示。

///////////////////////////////////////////////////// //////////
bash-3.00美元少OCkey.pem
----- BEGIN RSA私钥-----
Proc-Type:4,ENCRYPTED
DEK-Info:DES-EDE3-CBC,EA1DBF8D142621BF

BYyZuqyqq9 + L0UT8UxwkDHX7P7YxpKugTXE8NCLQWhdS3EksMsv4xNQsZSVrJxE3
Ft9veWuk + PlFVQG2utZlWxTYsUVIJg4KF7EgCbyPbN1cyjsi9FMfmlPXQyCJ72rd


cBlG80PT4t27h01gcCFRCBGHxiidh5LAATkApZMSfe6BBv4hYjkCmg ==
----- END RSA私钥-----
///////////////////// ///////////////////////////////////////////

以下是我尝试的

byte[] privKeyBytes = new byte[(int)new File("C:/OCkey.pem").length()]; 
PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(privKeyBytes));

但是得到


java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:无效的密钥格式”

请帮忙。


问题答案:

确保私钥为DER格式,并且您使用的是正确的密钥规范。我相信您应该在此处将PKCS8用于privkeybytes

首先,您需要将私钥转换为二进制DER格式。使用OpenSSL的方法如下:

openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key.pem -out private_key.der -nocrypt

最后,

public static PrivateKey getPrivateKey(String filename) throws Exception {

        File f = new File(filename);
        FileInputStream fis = new FileInputStream(f);
        DataInputStream dis = new DataInputStream(fis);
        byte[] keyBytes = new byte[(int) f.length()];
        dis.readFully(keyBytes);
        dis.close();

        PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory kf = KeyFactory.getInstance("RSA");
        return kf.generatePrivate(spec);
    }


 类似资料:
  • 我正在尝试从检索或实例,而不将保存到文件系统。 中是否有任何方法从现有的返回或?

  • 问题内容: 我允许用户通过拖放和其他方法将图像加载到页面中。放置图像时,我用来转换为对象URL以显示图像。我没有撤消该URL,因为我确实重复使用了它。 因此,当需要创建一个对象时,我可以允许他们上传其中包含其中一个图像的表单,是否可以通过某种方式将该对象URL反向转换为a ,然后可以将其附加到a 宾语? 问题答案: 正如gengkev在上面的评论中所暗示的那样,似乎最好/唯一的方法是使用异步xhr

  • 我允许用户通过拖动将图像加载到页面中 那么,当需要创建一个对象时,我可以允许他们上传一个包含其中一个图像的表单,有没有什么方法可以将该对象URL反转回或,然后将其附加到对象?

  • 我必须从文件中获取一个数字,有些文件包含字母和数字。比如(dsh8kuebw9)或者有(8)这样的空格,我怎样才能得到这些数字?我试过很多次了。我有一个方法可以找到一个数字出现在一个数字中的方法是count8方法。 parseInt将文件的行转换为整数,但由于在某些文件中有字母,我的方法遇到了问题,因为它只接受整数而不接受字符串

  • 我是Javascript新手,我正试图从包含多个对象的数组中获取id键的值。 通过 for..在循环中,我需要对象的id - 如1,2或3 - 与不同的值进行比较。 我试着这样做: 但是,我这样做了,删除Id值返回未定义。 我想不通为什么返回未定义,我无法解决这个问题。 我希望我能很好地表达自己,对不起我的英语不好。

  • 问题内容: 给定一个对象,是否可以获取源文件名和声明该类的行号? 该数据应在文件的调试信息中可用。我唯一知道的JDK返回此类调试信息的位置位于,但是我不确定是否可以强制Java 为任意类创建实例,因为我们没有在该类中执行方法。 我的确切用例是一个匿名内部类,它具有编译器生成的名称。我想知道类声明的文件名和行号。 我不想使用字节码操作框架,但是如果需要的话,我可以退一步。 问题答案: 答案在于您对实