Проблемы с Android Cipher.InvalidKeyException? - PullRequest
2 голосов
/ 15 февраля 2010

Я пытаюсь создать приложение для 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, кажется, вызывает эту ошибку.

Пожалуйста, помогите. Спасибо, Райан

1 Ответ

1 голос
/ 17 февраля 2010

Вы пытались явно указать размер блока в параметре режима?

Ex:

Cipher.getInstance("AES/CBC16/PKCS5Padding");

Я заметил здесь , что если вы не укажете размер блока, то это зависит от поставщика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...