次のコードを使用して、128 ビット AES で暗号化された暗号テキストを復号化しています。
final IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
final SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
final Cipher cipherSpec = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipherSpec.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
cipherSpec.doFinal(DatatypeConverter.parseBase64Binary(encrypted));
私の暗号化されたテキストは単純な 1 行のステートメントであり、次のキーと初期バークターを使用しています
Key = "77696567683763656548616574326F6F"; // 128 bit key, hext string
initVector = "6F68706865726F68563274686F6F3761"; // 16 bytes IV, hex string
次のシナリオを除いて、すべて正常に機能しました。
1) key を初期ベクトルとして使用し、初期ベクトルとキーを使用してプレーン テキストを暗号化します。BadPaddingException で復号化に失敗しました
2) キーをキー、初期ベクトルを初期ベクトルとして暗号化します。上記のコードは例外なく暗号文を復号化しますが、出力はガベージです。私が暗号化したものではありません。
3) 正しく暗号化された暗号文の上で (2 ステップで) 再度復号化し、正しいプレーン テキストに復号化されます。
私の質問は、ステップ 2 で復号化が正しい暗号文への復号化に失敗する理由です。