0

次のコードを使用して、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 で復号化が正しい暗号文への復号化に失敗する理由です。

4

1 に答える 1

0

キーが 128 ビットの場合、32 文字ではなく 16 文字 (utf-8) のバイト配列である必要があると思います。だからあなたは次のようなことをしたいでしょう:

Key = ("7769656768376365").getBytes("UTF-8");
于 2016-05-24T20:55:37.517 に答える