Я пытаюсь выполнить шифрование AES на Android. Я использую метод cipher.doFinal()
для шифрования данных. Это хорошо работает для небольших данных, но не работает, когда я использую его для больших данных. При попытке зашифровать большие данные, например, байтовый массив длиной 200 Кбайт, мой конечный результат - байтовый массив длиной 70 Кбайт. Это меньше половины исходного размера данных. Кроме того, при расшифровке того же изображения я могу подтвердить свой результат. Дешифрованное изображение составляет всего 1/3 оригинала. Как ни странно, ни один вызов шифрования не генерирует никаких исключений, например, неверный размер блока, недопустимая длина и т. Д.
Я не уверен, что делать дальше и как правильно шифровать большие данные. Вот код, используемый для генерации ключа и шифрования данных:
KeyGenParameterSpec parameterSpec = new KeyGenParameterSpec.Builder(
ALIAS,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(BLOCK_MODE)
.setEncryptionPaddings(PADDING)
.setUserAuthenticationRequired(false)
.build();
KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM, ANDROID_KEY_STORE);
keyGenerator.init(parameterSpec);
SecretKey key = keyGenerator.generateKey();
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedData = cipher.doFinal(plainData);