3

我正在实施 DES - CBC。我对做什么cipher.init和做什么cipher.update感到困惑cipher.dofinal。我只是使用 init 来设置密钥并dofinal获得结果。我不使用更新。那是对的吗?

使用UTF-8ASCII编码时,结果有何不同?

这是我的代码:

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

1 回答 1

3

Javadoc forCipher.doFinal(byte[])说(部分添加了重点),

在单部分操作中加密或解密数据,或完成多部分操作。数据被加密或解密,取决于这个密码是如何初始化的。

处理输入缓冲区中的字节,以及可能在先前更新操作期间缓冲的任何输入字节,并应用填充(如果请求)。如果使用GCM/CCM等AEAD模式,则在加密的情况下附加认证标签,在解密的情况下进行验证。结果存储在一个新的缓冲区中。

这样做是为了不必将所有文件(例如)读入内存来加密它。

于 2014-11-09T02:26:08.187 回答