我正在实施DES - CBC。我对cipher.init
,cipher.update
和cipher.dofinal
做了什么感到困惑。我只是使用init来设置密钥,dofinal
来获取结果。我不使用更新。这是对的吗?
使用 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 :(得分:1)
Cipher.doFinal(byte[])
的Javadoc表示(部分增加了重点),
在单部分操作中加密或解密数据,或完成多部分操作。数据经过加密或解密,具体取决于此密码的初始化方式。
处理输入缓冲区中的字节以及在上次更新操作期间可能已缓冲的任何输入字节,并应用填充(如果请求)。如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。结果存储在新缓冲区中。
这样做是为了不必将所有文件(例如)读入内存以加密它。