如何将.der文件中的私钥加载到java私钥对象中

我正在编写一个java程序来从文件系统中的文件导入私钥,并使用java创建一个私钥对象…我可以用.pem格式的文件来做,但是,使用.der格式,我不知道做什么,因为我无法首先检测用于生成密钥的算法。 在.pem文件中,我可以从PKCS#1的标题中确定算法,该标题有一个标题
-----BEGIN RSA PRIVATE KEY----
格式和使用bouncycastle pem阅读器的PKCS#8有标题
-----BEGIN PRIVATE KEY-----但与.der格式的人不明白:(
如果有人对.key格式的想法告诉我
感谢名单

如果您的DER文件是PKCS#8格式,您可以使用Java KeyFactory并执行以下操作:

 // Read file to a byte array. String privateKeyFileName = "C:\\myPrivateKey.der"; Path path = Paths.get(privateKeyFileName); byte[] privKeyByteArray = Files.readAllBytes(path); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privKeyByteArray); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey myPrivKey = keyFactory.generatePrivate(keySpec); System.out.println("Algorithm: " + myPrivKey.getAlgorithm()); 

您提到您可能不知道密钥使用的算法。 我确信有一个比这更优雅的解决方案,但你可以创建几个KeyFactory对象(每个可能的算法一个)并尝试在每个对象上生成KeyFactory generatePrivate() ,直到你没有得到InvalidKeySpecException

感谢@gtrig使用你的想法并编辑代码如下:

  PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(KeyBytes); try KeyFactory keyFactory = KeyFactory.getInstance("RSA"); privateKey = keyFactory.generatePrivate(keySpec); algorithm = keyFactory.getAlgorithm(); //algorithm = "RSA"; //publicKey = keyFactory.generatePublic(keySpec); } catch (InvalidKeySpecException excep1) { try { KeyFactory keyFactory = KeyFactory.getInstance("DSA"); privateKey = keyFactory.generatePrivate(keySpec); algorithm = keyFactory.getAlgorithm(); //publicKey = keyFactory.generatePublic(keySpec); } catch (InvalidKeySpecException excep2) { KeyFactory keyFactory = KeyFactory.getInstance("EC"); privateKey = keyFactory.generatePrivate(keySpec); } // inner catch } 

代码现在运行良好