2014-11-09 3 views
1

Я использую DES-CBC. Я смущен относительно того, что cipher.init, cipher.update и cipher.dofinal сделать. Я просто использую init для установки ключа и dofinal, чтобы получить результат. Я не использую обновление. Это верно?Что делает cipher.update в java?

также Что разница в результатах при использовании UTF-8 и ASCII кодировок?

Вот мой код:

byte[] ciphertext; 

Cipher enc = Cipher.getInstance("DES/CBC/PKCS5Padding"); 

enc.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, "DES"), new IvParameterSpec(vector)); 

// Is this the complete ciphertext? 
ciphertext = encrypt.doFinal(data.getbytes("UTF-8")); 
+0

Это 'byte', а не' bytes' ... –

+0

Вы прочитали документы на ['Cipher'] (https://docs.oracle.com/javase/7/docs/api/javax/crypto/ Cipher.html)? Джавадоки должны быть полезны. –

ответ

1

Javadoc для Cipher.doFinal(byte[]) говорит (в части с акцентом на добавленную стоимость),

Шифрует или дешифрует данные в работе с одной части, или заканчивает многочастная операция. Данные шифруются или дешифруются, в зависимости от того, как был инициализирован этот шифр.

Базы в входном буфере и любые входные байты, которые могут быть буферизованы во время предыдущего обновления, обрабатываются с применением дополнения (если требуется). Если используется режим AEAD, такой как GCM/CCM, тег аутентификации добавляется в случае шифрования или проверяется в случае дешифрования. Результат сохраняется в новом буфере.

Это делается для того, чтобы вам не нужно было читать весь файл (например) в памяти, чтобы зашифровать его.

+0

Каков сценарий, в котором мне нужно будет вызвать update()? – dfs

+0

@dfs Я коснулся этого в своем последнем предложении, если вам нужно зашифровать большой файл, часто нецелесообразно читать весь файл в 'byte []', чтобы вызвать 'doFinal (byte [])' со всем сообщение сразу. Вместо этого вы будете использовать 'update()' для обработки файла при чтении его в кусках. –

+0

Спасибо. Я понял. Знаете ли вы, какая разница в результате (когда я печатаю его на экране), если я использую кодировку UTF-8 или ASCII? Я напечатаю его в шестнадцатеричном формате – dfs

Смежные вопросы