2012-02-21 26 views
1

AES/CBC/PKCS5Paddingを使用して文字列の暗号化を解こうとしています この例外が発生します: javax.crypto.BadPaddingException:ここftp.clarapoint.comAES/CBC/PKCS5Padding Java暗号化エラー - javax.crypto.BadPaddingException:最終ブロックが適切に埋められていない場合

は、私の暗号化コードは次のとおりです:

cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");   
cipher.init(Cipher.ENCRYPT_MODE, aesKey); 
byte[] data = cipher.doFinal(stringDec.getBytes()); 
byte[] iv = cipher.getIV(); 

私は考える最後のブロックは、適切に私は暗号化しようとしている

文字列を埋めません解読方法を以下のように転送する:aesKey、データおよびiv

解読コード:

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
AlgorithmParameters.getInstance("AES"); 
cipher.init(Cipher.DECRYPT_MODE, aesKey, new IvParameterSpec(iv)); 
byte[] decrypted = cipher.doFinal(data); 

ありがとう!

+0

をあなたは、ロテムを少し訪問したタグを使用していました。私は暗号化を追加します... –

+0

あなたがあなたの質問に追いつくなら、それはいいでしょう、Rotem。 –

答えて

4

このコードが実行さんのようにして、正しくキーまたは暗号文のいずれかを転送されていません。

private static void testCode() { 
    try { 
     String stringDec = "Hi there"; 
     SecretKey aesKey = new SecretKeySpec(new byte[16], "AES"); 

     Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
     cipher.init(Cipher.ENCRYPT_MODE, aesKey); 

     // no encoding given, don't use getBytes() without a Charset.forName("UTF-8") 
     byte[] data = cipher.doFinal(stringDec.getBytes()); 
     byte[] iv = cipher.getIV(); 

     // doesn't do anything 
     AlgorithmParameters.getInstance("AES"); 

     cipher.init(Cipher.DECRYPT_MODE, aesKey, new IvParameterSpec(iv)); 
     byte[] decrypted = cipher.doFinal(data); 
     System.out.println(new String(decrypted)); 
    } catch (GeneralSecurityException e) { 
     throw new IllegalStateException(e); 
    } 
} 
関連する問題