私は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に変更したとき、すべてがうまく動作します。
これを回答として追加できますか?未回答の質問は時間が経つと削除されます。 – Reno
SecureRandomをシードしないでください。デフォルトのコンストラクタを使用してください。これにより、シードのシステムエントロピープールが使用されます。これは、タイムスタンプを使用するよりも安全です。 Android APIドキュメントのアップデートがすぐに提供され、これを明確にするのに役立ちます。 (これらの変更を反映するようにコードを編集しました。) –