Сбой установки Java Encryption с InvalidKeySpecException

Я пытаюсь написать простое приложение, которое принимает загруженные файлы и шифрует их перед сохранением на диск.

здесь есть фрагмент

InputStream is = item.openStream(); // item is obtained from file upload iterator
try{
   PBEKeySpec keySpec = new PBEKeySpec(passphrase.toCharArray(), salt.getBytes(),  iterations, keyLength);
   SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede"); 
   SecretKey key = keyFactory.generateSecret(keySpec); // Throws Exception
   CipherInputStream cis;
   Cipher cipher = Cipher.getInstance("RSA");
   cis = new CipherInputStream(is, cipher);
   cipher.init(Cipher.ENCRYPT_MODE, key);
 } catch (Exception ex){
    // catches the following exceptopn 
    java.security.spec.InvalidKeySpecException: Inappropriate key specification
    at com.sun.crypto.provider.DESedeKeyFactory.engineGenerateSecret(DashoA13*..)
   //
 }

Я также безуспешно пытался "RSA / ECB / PKCS1Padding". Что я сделал не так

Ответы на вопрос(1)

что вам нужно инициализироватьSecretKeyFactory совместимый сKeySpec вы предоставляете это. Попробуйте это например:

PBEKeySpec keySpec = new PBEKeySpec(passphrase.toCharArray(), salt.getBytes(),  iterations, keyLength);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndTripleDES");
SecretKey key = keyFactory.generateSecret(keySpec);
Cipher cipher = Cipher.getInstance(key.getAlgorithm());
CipherInputStream cis = new CipherInputStream(is, cipher);
cipher.init(Cipher.ENCRYPT_MODE, key);

TheSecretKeyFactory, созданный этим вызовом, может успешно сгенерировать ключ из экземпляраPBEKeySpec иCipher инициализируется с правильным алгоритмом.

 James K Polk19 мая 2012 г., 17:31
@ adaj21: Вам нужно будет сообщить нам, какую платформу Java вы используете и какую версию.
 laz19 мая 2012 г., 17:53
Упс, я поставил неправильный алгоритм. Я исправил ответ с правильным.
 adaj2119 мая 2012 г., 14:37
Спасибо @laz. Я попробовал это, и теперь, кажется, у меня проблема с поставщиком. Теперь звонок в Cipher.getInstance (key.getAlgorithm ()); throws "java.security.NoSuchAlgorithmException: не удается найти поставщика, поддерживающего PBKDF2WithHmacSHA1".
 adaj2121 мая 2012 г., 12:34
@ GregS, я использую Java 6.
 adaj2121 мая 2012 г., 12:36
@ laz, спасибо. Я попробовал это, и это работает. Как узнать, какой алгоритм поддерживается? Например, 3DES может быть недостаточно сильным для некоторых приложений.

Ваш ответ на вопрос