相关文章推荐
买醉的牛肉面  ·  回首2024 | ...·  6 月前    · 
拉风的勺子  ·  WebView - .NET MAUI | ...·  7 月前    · 
文武双全的松树  ·  entity.getId ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I am implementing DES - CBC. I am confused as to what cipher.init , cipher.update and cipher.dofinal do. I just use init to set the key and dofinal to get the result. I don't use update. Is that correct?

Also whats the difference to the result when using UTF-8 and ASCII encodings?

Here is my code:

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"));

The Javadoc for Cipher.doFinal(byte[]) says (in part with emphasis added),

Encrypts or decrypts data in a single-part operation, or finishes a multiple-part operation. The data is encrypted or decrypted, depending on how this cipher was initialized.

The bytes in the input buffer, and any input bytes that may have been buffered during a previous update operation, are processed, with padding (if requested) being applied. If an AEAD mode such as GCM/CCM is being used, the authentication tag is appended in the case of encryption, or verified in the case of decryption. The result is stored in a new buffer.

This is done so you don't have to read all of a file (for example) into memory in order to encrypt it.

@dfs I touched on this in my last sentence, if you need to encrypt a large file it's often impractical to read the entire file into a byte[] in order to call doFinal(byte[]) with the entire message at once. Instead you would use update() to process the file as you read it in chunks. – Elliott Frisch Nov 9, 2014 at 2:41 Thank you. I got it now. Do you know what difference it makes to the result (when I print it to screen) if I use UTF-8 or ASCII encoding? I will print it in hex – dfs Nov 9, 2014 at 2:42

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.