如何读取.pem文件格式的java中的EC私钥

时间:2017-12-21 12:05:22

标签: java security

如何读取使用JAVA的Pem文件中的EC私钥。在阅读时,我得到以下异常。

引起:java.security.InvalidKeyException:IOException:版本不匹配:(支持:00,解析:01

其实我的。 Pem文件包含以下结构中的私钥。

----开始EC私钥------ ==== + ==== + === ==== + ==== + === -----结束EC私钥-----

1 个答案:

答案 0 :(得分:0)

从请求的EC私钥(例如key.pem)中,我成功将其导入到java.security.KeyStore

  1. 从PEM => PKCS#8 DER转换私钥
    openssl pkcs8 -in key.pem -inform PEM -topk8 -nocrypt -out key-pkcs8.der -outform DER
  1. 加载它(jvm版本java-1.8.0-openjdk-1.8.0.201.b09-2.fc28.x86_64)
 void loadPrivateKey(KeyStore ks, X509Certificate cert){
    File privKeyFile = new File("key-pkcs8.der");
    // read private key DER file
    DataInputStream dis = new DataInputStream(new FileInputStream(privKeyFile));
    byte[] privKeyBytes = new byte[(int)privKeyFile.length()];
    dis.read(privKeyBytes);
    dis.close();

    KeyFactory kf = KeyFactory.getInstance("EC");
    // decode private key
    PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(privKeyBytes);
    PrivateKey privKey = kf.generatePrivate(privSpec);
    ks.setKeyEntry("key-alias", privKey, "password".toCharArray(), new Certificate[] {cert});
}