Шифрование javax.crypto AES. Мне нужно только вызвать doFinal?

Я хочу сделать шифрование AES CBC на Java. Я использую javax.crypto. После того, как я инициализировал Cipher, мне нужно только вызвать doFinal для чистых байтов, чтобы правильно его зашифровать? Или нужно что-то делать с update?

В документации говорится об обновлении:

Продолжает операцию шифрования или дешифрования, состоящую из нескольких частей.

и сделатьFinal

Шифрует или расшифровывает данные в одноэтапной операции или завершает многоэтапную операцию

что именно они подразумевают под многокомпонентным шифрованием?


person Kyle    schedule 12.03.2010    source источник


Ответы (1)


doFinal добавляет заполнение PKCS7 в последний блок. Таким образом, вы можете вызывать нулевое обновление много раз, но последний вызов должен быть doFinal. Многокомпонентное шифрование — это когда данные не являются непрерывными в памяти. Типичным примером являются буферы, полученные из сокета. Вы настраиваете шифр, а затем начинаете вызывать обновление для шифрования или расшифровки данных, блок за блоком, и создаете зашифрованные/дешифрованные данные, добавляя блоки, возвращенные обновлением. В последнем входном блоке вы вызываете doFinal, и возвращаемый блок последним добавляется к выходным данным. При шифровании doFinal добавит заполнение. При расшифровке doFinal проверит и удалит заполнение.

person Remus Rusanu    schedule 12.03.2010
comment
Итак, мне нужно разделить мой массив байтов на куски размера BLOCKSIZE и вызвать обновление для каждого блока, кроме последнего, и вызвать doFinal для последнего? Или я могу просто вызвать doFinal, и он сделает все за меня? - person Kyle; 13.03.2010
comment
Вам нужно делать несколько обновлений только в том случае, если данные не являются смежными. Если у вас уже есть это в одном непрерывном блоке, вы можете просто вызвать doFinal один раз. - person Remus Rusanu; 13.03.2010
comment
А, понятно. Таким образом, причина, по которой вы будете выполнять шифрование как составное, заключается в том, что вы хотите начать шифрование данных, как только вы их получите, а не ждать, пока вы полностью не получите все данные? - person Kyle; 13.03.2010
comment
Верно. также вы не хотите перемещать данные только для создания непрерывного блока. - person Remus Rusanu; 13.03.2010