Я делаю расшифровку AES CBC в java с помощью javax.crypto. Я использую следующие методы Cipher класса:Cipher.doFinal размер выходного файла
public final void init (int opmode, Key key, AlgorithmParameters params)
метод инициализации,final int update(byte[] input, int inputOffset, int inputLen, byte[] output)
метод для дешифрования данных,- и, наконец, я называю метод
final int doFinal(byte[] output, int outputOffset)
закончить расшифровку.
Мой запрос таков: могу ли я предположить, что размер данных, возвращаемых мне вызовом doFinal
, всегда будет меньше или равен размеру блока AES? Документация описывает метод doFinal как:
«Завершает преобразование с несколькими частями (шифрование или дешифрование). Процессы любые байты, которые могут быть буферизированы в предыдущих вызовах обновления. Окончательные преобразованные байты хранятся в выходном буфере.»
Но нигде не говорится о том, что выходной буфер будет содержать не более одного блока данных. Хотя я понимаю, что это общее поведение API AES, и это поведение, которое мой код проявил до сих пор, но будет ли это предположение всегда выполняться?
Чтобы быть ясным, мне нужно вызвать функцию обновления несколько раз, когда я получаю зашифрованные данные в кусках. У меня нет всех зашифрованных данных, поэтому я не могу сделать один вызов doFinal, чтобы получить результат за один шаг. – vikas