Cipher.doFinal обрезает размер данных при использовании AES / CBC / PKCS7 - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь выполнить шифрование 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);
...