Я пытаюсь расшифровать зашифрованные данные, полученные из веб-службы, используя криптографию AES128.
следующий код, который я использую для достижения того же.
Но я всегда javax.crypto.IllegalBlockSizeException: last block incomplete in decryption
следующее исключение: javax.crypto.IllegalBlockSizeException: last block incomplete in decryption
public static String decrypt(String strToDecrypt)
{
try
{
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
final SecretKeySpec secretKey = new SecretKeySpec(AppConstants.AESEncryptionKey.getBytes("UTF8"), "AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey,new IvParameterSpec(new byte[16])); //new IvParameterSpec(new byte[16])
byte base64Data[] = Base64.encode(strToDecrypt.getBytes(), Base64.DEFAULT);
@SuppressWarnings("unused")
String s = base64Data.toString();
byte decBytes[] = cipher.doFinal(base64Data);
String decStr = new String(decBytes);
return decStr;
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
Пожалуйста, залейте свои ценные материалы, поскольку я сильно застрял здесь.
Вы кодируете кодированный текст с кодировкой base 64, а не декодируете его. В зависимости от вашего Base64
вам нужно вызвать функцию, которая декодирует из String
или CharSequence
в массив байтов, а затем расшифровывает это. Пожалуйста, проверьте, является ли результат кратным размеру блока, 16 байтов для AES.
Вы должны вызвать Base64.decodeBase64 (s). Затем вызовите Cipher.doFinal()
Cipher.doFinal(Base64.decodeBase64 (ы));
Важная заметка
В моем случае эта проблема возникла из-за того, что шифрование не было выполнено должным образом, когда я пытаюсь зашифровать данные в то время, когда мой код с ошибкой вызывает ошибку, потому что при среднем шифровании прекращается, поэтому, как только вы проверяете, что шифрование работает правильно.