从文件加载RSA私钥时的InvalidKeySpecExeption

我正在尝试从java中的文件加载私钥。 此密钥由ssh-agent生成。 我实际上使用下面的代码:

public PrivateKey getPrivateKeyFromFile() { try { //String privateKey = readFileAsString(System.getProperty("user.dir")+"/clefs/"+privateKeyName); //byte[] encodePrivateKey = privateKey.getBytes(); File filePrivateKey = new File(System.getProperty("user.dir")+"/clefs/"+privateKeyName); FileInputStream fis = new FileInputStream(System.getProperty("user.dir")+"/clefs/"+privateKeyName); byte[] encodePrivateKey = new byte[(int) filePrivateKey.length()]; fis.read(encodePrivateKey); fis.close(); java.security.KeyFactory keyFactory = java.security.KeyFactory.getInstance("RSA"); PKCS8EncodedKeySpec privatekeySpec = new PKCS8EncodedKeySpec(encodePrivateKey); PrivateKey prikey = (PrivateKey) keyFactory.generatePrivate(privatekeySpec); return prikey; } catch (NoSuchAlgorithmException ne) { ne.printStackTrace(); } catch (InvalidKeySpecException is) { is.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return null; } 

但它产生了这个例外:

  java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:217) at java.security.KeyFactory.generatePrivate(KeyFactory.java:372) at com.nguyenkim.cea.signature.SignChallenge.getPrivateKeyFromFile(SignChallenge.java:53) at com.nguyenkim.cea.signature.SignChallenge.main(SignChallenge.java:128) Caused by: java.security.InvalidKeyException: invalid key format at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:341) at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:367) at sun.security.rsa.RSAPrivateCrtKeyImpl.(RSAPrivateCrtKeyImpl.java:91) at sun.security.rsa.RSAPrivateCrtKeyImpl.newKey(RSAPrivateCrtKeyImpl.java:75) at sun.security.rsa.RSAKeyFactory.generatePrivate(RSAKeyFactory.java:316) at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:213) ... 3 more 

这是私钥:

  -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAszReSzBumVb9GR/f3ClgykWE4UsONan1Ywk/H4+Wbi4HpcwB 8Lm9B+zJ94WdRtD8iQYmbUZFoHwFqTjRPtmQfFXcmxfuI7v64bg0csIw8hz1Af2r xo7HBUoVcrTG5k3YrIkjeni/vD9uK6OZ1/lb+/TIvoEp9za577GJxv1omQ6GX7kv baMe2GkfpJmrXnA706OEdyi3Ibdcng/V4lbJ9cm+TIBU2jLBqwEukwpL5VNghuQi 3YfpGhnPDBEnh4h5euFs4DGs4FnCgb+00yCuEgJSPvO5HsTnGbwTtEUnkxjtg8vD plD7WenPsyiZqib/rLkNcpfEHKVC6G3QjEuO8QIDAQABAoIBAGliRoFY/fFW4og/ ............................. -----END RSA PRIVATE KEY----- 

有什么建议么? 谢谢。

你确定它的RSA吗? 您还确定密钥格式正确吗?

如果两个问题的答案都是肯定的,你可以尝试使用bouncycastle lib

编辑:尝试从键中删除这些行:

 -----BEGIN RSA PRIVATE KEY----- ............................. -----END RSA PRIVATE KEY----- 

更新:确保你的私钥是PKCS8格式,如果不是你需要像这里转换它