0

アップロードされたファイルを取り込み、ディスクに保存する前に暗号化する単純なアプリケーションを作成しようとしています。

ここにスニペットがあります

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」も試しましたが成功しませんでした。私は何を間違えましたか?

4

1 に答える 1

2

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);

このSecretKeyFactory呼び出しによって生成されたものは、のインスタンスからキーを正常に生成できPBEKeySpecCipherは正しいアルゴリズムで初期化されます。

于 2012-05-19T04:57:41.833 に答える