2015-12-14 3 views
0

Привет Я пытаюсь прочитать Зашифрованный закрытый ключ в JAVA. Ключ используется в PKCS # 8 с шифрованием Algo как PBE с SHA-1 и 2-мя ключами DESede.Зашифрованный закрытый ключ в JAVA: java.security.InvalidKeyException

код, как указано ниже:

EncryptedPrivateKeyInfo encryptPKInfo = new EncryptedPrivateKeyInfo("RSA",readFileBytes(filename)); 
Cipher cipher = Cipher.getInstance(encryptPKInfo.getAlgName()); 
PBEKeySpec pbeKeySpec = new PBEKeySpec("pwd".toCharArray()); 
SecretKeyFactory secFac = SecretKeyFactory.getInstance("PBEWithSHA1AndDESede"); 
Key pbeKey = secFac.generateSecret(pbeKeySpec); 
AlgorithmParameters algParams = encryptPKInfo.getAlgParameters(); 
cipher.init(Cipher.DECRYPT_MODE, pbeKey,algParams); 
KeySpec pkcs8KeySpec = encryptPKInfo.getKeySpec(cipher); 
KeyFactory kf = KeyFactory.getInstance("RSA"); 
return kf.generatePrivate(pkcs8KeySpec); 

И я столкнулся с указанной ниже ошибки:

Exception in thread "main" java.security.InvalidKeyException: No installed provider supports this key: com.sun.crypto.provider.PBEKey 
at javax.crypto.Cipher.chooseProvider(Cipher.java:888) 
at javax.crypto.Cipher.init(Cipher.java:1507) 
at javax.crypto.Cipher.init(Cipher.java:1438) 
at com.abc.utils.CertificateUtil.readEncryptedPrivateKey(CertificateUtil.java:62) 
at com.abc.test.Test1.main(Test1.java:16) 
+1

Почему вы думаете, что 'Cipher.getInstance (" 1.2.840.113549.1.12.1.4 ")' не должно выбрасывать это исключение? Шифры называются такими, как 'AES'. 'Blowfish',' DES', 'DESede',' PBEWithSHA1AndDESede', 'RC2',' RSA', ... – Andreas

ответ

0
SecretKeyFactory secFac = SecretKeyFactory.getInstance("PBEWithSHA1AndDESede") 

PBEWithSHA1AndDESede не имя алгоритма шифрования, поддерживаемого Java. Для получения правильного списка см. Standard Algorithm Names.

Возможно, вы имели в виду PBEWithHmacSHA1AndDESede?