cipher.update在java中做什么?
我正在实施DES-CBC。我对cipher.update在java中做什么?,java,cryptography,aes,des,cbc-mode,Java,Cryptography,Aes,Des,Cbc Mode,我正在实施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 S
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"));
Javadoc for says(部分添加了强调)
在单部分操作中加密或解密数据,或完成多部分操作。数据被加密或解密,这取决于此密码的初始化方式
处理输入缓冲区中的字节,以及在上一次更新操作期间可能已缓冲的任何输入字节,并应用填充(如果请求)。如果使用诸如GCM/CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证认证标签。结果存储在新的缓冲区中
这样做的目的是,您不必为了加密而将所有文件(例如)都读入内存。它是
字节
,而不是字节
…您在上读取了文档吗?javadocs应该会有帮助。在什么情况下我需要调用update()?@dfs我在最后一句话中谈到了这一点,如果你需要加密一个大文件,通常不可能将整个文件读入一个byte[]
,以便一次调用doFinal(byte[])
,同时调用整个消息。相反,您可以使用update()
在分块读取文件时对其进行处理。谢谢。我现在明白了。你知道如果我使用UTF-8或ASCII编码,结果会有什么不同吗(当我把它打印到屏幕上时)?我会把它打印出来hex@dfs这取决于信息。