2017-04-04 14 views
2

このトピックでは、スタックオーバーフローには多くのスレッドがありますが、常に同じ解決策ですが、これらは私のためには機能しません。私は値byte[]を復号化し、byte[] decodedBytesを返す方法を探しています。暗号機能:間違ったブロック長さAndroidスタジオ

メソッドAESCryptで。私は使用します。compile 'com.scottyab:aescrypt:0.0.1'

private void testAES() { 
    try { 

     final byte[] encrypted = Base64.decode("R3JhbmRlIFZpY3RvaXJlICE=", Base64.NO_WRAP); 

     byte[] keyBytes = Base64.decode("L/91ZYrliXvmhYt9FKEkkDDni+PzcnOuV9cikm188+4=", Base64.NO_WRAP); 
     final byte[] ivBytes = Base64.decode("gqjFHI+YQiP7XYEfcIEJHw==".getBytes(), Base64.NO_WRAP); 

     final SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES"); 

     byte[] decodedBytes = AESCrypt.decrypt(keySpec, ivBytes, encrypted); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

値では、私はそのように使用します。

private static byte[] testCipher() { 

    try { 

     final byte[] encrypted = Base64.decode("R3JhbmRlIFZpY3RvaXJlICE=", Base64.NO_WRAP); 

     byte[] keyBytes = Base64.decode("L/91ZYrliXvmhYt9FKEkkDDni+PzcnOuV9cikm188+4=", Base64.NO_WRAP); 
     byte[] ivBytes = Base64.decode("gqjFHI+YQiP7XYEfcIEJHw==".getBytes(), Base64.NO_WRAP); 

     final IvParameterSpec ivSpecForData = new IvParameterSpec(ivBytes); 

     SecretKeySpec decodedKeySpec = new SecretKeySpec(keyBytes, "AES"); 
     Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
     cipher.init(Cipher.DECRYPT_MODE, decodedKeySpec, ivSpecForData); 

     byte[] decodedBytes = cipher.doFinal(encrypted); // I have the error here // 

     return decodedBytes; 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

私は何であれ、私はオールウェイズ同じエラーを持っている:

error:1e06b07b:Cipher functions:EVP_DecryptFinal_ex:WRONG_FINAL_BLOCK_LENGTH

私がCipher.getInstance(AES/CBC/NoPadding、AES/CBC/PKCS5Padding、AES /に入れてみてくださいCBC/PKCS7Padding)でも変更はありません。 私を助ける考えがありますか?

+1

ようこそスタックオーバーフロー!パディングエラーは、間違ったキー、間違ったエンコーディング、不完全な/過度の暗号文など、任意の数のものを意味する可能性があります。暗号化コードを表示し、使用した値の例を示す必要があります。それ以外の場合は、このコード(または暗号化コード)に何が間違っているかを推測する必要があります。一言で言えば、[最小限の、完全で、証明可能な例](http://stackoverflow.com/help/mcve)を作成してください。 –

答えて

1

"R3JhbmRlIFZpY3RvaXJlICE="は、ASCIIテキストである17hexの16進数4772616E646520566963746F6972652021( "Grande Victoire!")にデコードされます。

17バイトは、暗号化されたデータが16バイトのブロックサイズの倍数である必要があるブロック暗号であるAESの有効なサイズではありません。

Base64エンコーディングだけの暗号化はありません。

+0

ありがとうございます。私は本当にAES/CBC/PKCS5Paddingがバイトをハッシュし、最後のブロックを直接埋めることができると考えました。私は基本的にIOSで同じコードを持っていますが、それは動作し、私は理由を知らない。 あなたがそれらの2つの違いを知っているなら、あなたができるかどうか私に教えてください。なぜなら私はまだ私の解読コードに詰まっているからです。 –

関連する問題