我有一个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
Run Code Online (Sandbox Code Playgroud)
证书如下所示.
////////////////////////////////////////////////// /////////
bash-3.00 $ less OCkey.pem
----- BEGIN RSA PRIVATE KEY -----
Proc-Type:4,ENCRYPTED
DEK-Info:DES-EDE3-CBC,EA1DBF8D142621BFBYyZuqyqq9 + 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));
Run Code Online (Sandbox Code Playgroud)
但得到
"java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:无效的密钥格式"
请帮忙.
Zak*_*aki 13
确保私钥是DER格式,并且您正在使用正确的keyspec.我相信你应该在这里使用PKCS8作为privkeybytes
首先,您需要将私钥转换为二进制DER格式.以下是使用OpenSSL的方法:
openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key.pem -out private_key.der -nocrypt
Run Code Online (Sandbox Code Playgroud)
最后,
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16149 次 |
| 最近记录: |