如何将.der文件中的私钥加载到java私钥对象中
我正在编写一个java程序,使用java从文件系统中的文件导入私钥,并生成一个私钥对象。。。 我可以对如何将.der文件中的私钥加载到java私钥对象中,java,format,bouncycastle,pkcs#8,Java,Format,Bouncycastle,Pkcs#8,我正在编写一个java程序,使用java从文件系统中的文件导入私钥,并生成一个私钥对象。。。 我可以对.pem格式的文件执行此操作,但对于.der格式的文件,我不知道该怎么做,因为我无法首先检测用于生成密钥的算法。 在.pem文件中,我可以从PKCS#1的头确定算法,该头类似 ----开始RSA私钥--- 格式化并使用bouncycastlepemreader,用于PKCS#8中具有标题的内容 ----开始私钥------ 但是对于那些采用.der格式的文件,我不知道:( 另外,如果有人对.ke
.pem
格式的文件执行此操作,但对于.der格式的文件,我不知道该怎么做,因为我无法首先检测用于生成密钥的算法。
在.pem
文件中,我可以从PKCS#1
的头确定算法,该头类似----开始RSA私钥---
格式化并使用bouncycastle
pem
reader,用于PKCS#8中具有标题的内容----开始私钥------
但是对于那些采用.der格式的文件,我不知道:(另外,如果有人对
.key
格式有任何想法,请告诉我thanx如果您的DER文件是PKCS#8格式的,您可以使用Java执行以下操作:
// 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
对象(每个可能的算法一个)并尝试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
}
代码现在运行良好谢谢我知道我可以使用它,但我希望它适用于所有类型的键,我对某个特定的key@monim,这就是为什么我提到可以实例化多个KeyFactories…可能的每种类型的键一个,然后捕获不可能的异常为其工作。它为之工作的将为您提供正确的PrivateKey object.hmmmm,如果PKCS#1中的DER文件,该策略将不起作用。如果密钥为PKCS#1格式,则该策略将不起作用。为了同时读取PKCS#1和PKCS#8 PEM/DER文件,我使用Apache JMeter的源代码。我如何使用源代码@JulienKronegg?您可以吗在单独的答案中发布一个示例?@arik:PrivateKey pk=(新的PrivateKeyReader(“/path/to/myfile.der”)).getPrivateKey();