2011-07-04 7 views
2

私はJavaでAES暗号化と復号化をしばらく試してみようとしています。残念ながら私は多くの運がなかった。今私は1つの方法に戻ってSecretKeySpecに私はそれを変換キーを使用して入力バイトを暗号化しようとするにはAES - キーを生成してロードすると無効なキー例外が返される

keyGen = KeyGenerator.getInstance("AES"); 
SecureRandom random = SecureRandom.getInstance(); 
keyGen.init(size, random); 
SecretKey key = keyGen.generateKey(); 
AesKey = key.getEncoded(); 

を示すされているコードを、キーを生成することができます。私の暗号化コードを以下に示します。

SecretKeySpec keySpec = new SecretKeySpec(AesKey, "AES"); 
Cipher cipher = Cipher.getInstance("AES"); 
cipher.init(Cipher.ENCRYPT_MODE, keySpec); 
return cipher.doFinal(input); 

しかし、私がcipher.init行を呼び出すと、InvalidKeyExceptionが発生します。

私はキーを間違って生成していますか?キーを間違ってロードしていますか?それは組み合わせですか?私はこれに固執しているので、どんな洞察にも感謝します。

更新

だから私はそれを実現しませんでしたが、生成する関数を呼び出した部分は無効なサイズを渡しました。そのビットを見つけてそれを256に変更したとき、すべてがうまく動作します。

+0

これを回答として追加できますか?未回答の質問は時間が経つと削除されます。 – Reno

+0

SecureRandomをシードしないでください。デフォルトのコンストラクタを使用してください。これにより、シードのシステムエントロピープールが使用されます。これは、タイムスタンプを使用するよりも安全です。 Android APIドキュメントのアップデートがすぐに提供され、これを明確にするのに役立ちます。 (これらの変更を反映するようにコードを編集しました。) –

答えて

1

生成関数を呼び出すコードが無効なサイズを渡していました。私はそれがkeyGen.generateKey()行によって捕捉されると思ったが、私は間違っていた。実際にキーを使用しようとするまで、エラーは発生しませんでした。 sizeが256になるようにgenerate関数を呼び出したコードを変更すると、問題は解決されました。

関連する問題