このトピックでは、スタックオーバーフローには多くのスレッドがありますが、常に同じ解決策ですが、これらは私のためには機能しません。私は値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)でも変更はありません。 私を助ける考えがありますか?
ようこそスタックオーバーフロー!パディングエラーは、間違ったキー、間違ったエンコーディング、不完全な/過度の暗号文など、任意の数のものを意味する可能性があります。暗号化コードを表示し、使用した値の例を示す必要があります。それ以外の場合は、このコード(または暗号化コード)に何が間違っているかを推測する必要があります。一言で言えば、[最小限の、完全で、証明可能な例](http://stackoverflow.com/help/mcve)を作成してください。 –