2016-05-24 15 views
0

次のコードを使用して、128ビットAESで暗号化された暗号テキストを復号化しています。Badpadding例外後にJava 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行の文であると、私は次のキーと初期verctorを使用しています

Key = "77696567683763656548616574326F6F"; // 128 bit key, hext string 
initVector = "6F68706865726F68563274686F6F3761"; // 16 bytes IV, hex string 

すべてがシナリオを以下を除いてうまく働きました。

1)キーを初期ベクトルとして使用し、初期ベクトルとキーを使用してプレーンテキストを暗号化します。 BadPaddingExceptionで復号化に失敗しました。

2)鍵と初期ベクトルを初期ベクトルとして使用して暗号化します。上記のコードは、暗号テキストを例外なく復号化しますが、出力は不要です。暗号化されたものではありません。

3)正しい暗号化された暗号文の上で(2段階で)再度復号化し、正しい平文に復号化されます。

私の疑問は、復号化がステップ2で正しい暗号テキストに復号化されないのはなぜですか?

+0

あなたは何か間違っていますが、与えられた情報から何かを推測することは不可能です。問題を示す最小完全コードを表示します。そして、キーとIVを交換しようとしないでください。彼らは異なったアイデアであり、決してうまくいかないが、セキュリティを破壊するだろう。 –

答えて

0

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

Key = ("7769656768376365").getBytes("UTF-8");