Я пытаюсь создать приложение для Android, которое использует шифрование для сохранения информации о пользователе, и я не могу понять, что я делаю неправильно. Я пытаюсь создать экземпляр шифра AES, но приложение продолжает выдавать «InvalidKeyExceptions». Рассмотрим следующий код:
public static final byte[] IV = new byte[]
{ 0x04, 0x08, 0x15, 0x16, 0x23, 0x42, 0x00, 0x00, 0x00, 0x00,0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
protected final IvParameterSpec params = new IvParameterSpec(IV);
protected Cipher myCipher;
public AESEncryptor(String passwd, InputStream source, String destinationFile)
{
try
{
myCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
Log.d("System.out.println", "Block Size: "+myCipher.getBlockSize());
myCipher.init(Cipher.ENCRYPT_MODE, AESEncryptor.generateSecretKeyFromPassword(passwd),params);
}
catch (Exception e)
{
e.printStackTrace();
}
}
Я получаю это исключение:
java.security.InvalidKeyException:
вектор инициализации должен быть одинаковым
длина как размер блока ..
Строка myCipher.init (...) вызывает это исключение.
Я понимаю, что он говорит, но согласно myCipher.getBlockSize () массив байтов IV должен содержать 16 байтов, и это так, но это не работает. Я также пробовал массивы байтов длиной 0-128, и ничего в этом диапазоне тоже не работает.
Кроме того, если я возьму этот код без изменений и добавлю его в обычное приложение Java, я не получу ошибок. Компиляция для Android, кажется, вызывает эту ошибку.
Пожалуйста, помогите.
Спасибо,
Райан