我正在使用javax.crypto在java中进行AES CBC解密。我使用下面的密码类方法:Cipher.do最终输出大小
public final void init (int opmode, Key key, AlgorithmParameters params)
用于初始化方法, 解密数据
final int update(byte[] input, int inputOffset, int inputLen, byte[] output)
方法,- 最后我称之为
final int doFinal(byte[] output, int outputOffset)
方法来完成解密。
我的查询是这样的吗?我可以假设doFinal
调用返回给我的数据大小总是小于或等于AES块大小?该文档将doFinal方法描述为:
“完成多部分转换 (加密或解密)。处理 在先前的更新调用中可能已经缓冲了 的任何字节。最后 转化字节存储在 输出缓冲区。”
但无处说,输出缓冲区包含的数据最多一个块。虽然我明白这是AES API的一般行为,而这是我的代码迄今为止所展示的行为,但是这种假设一直会持续吗?
为了清楚起见,我需要多次调用更新函数,因为我以块的形式获取加密数据。我没有整个加密的数据,所以我不能做一个单一的调用doFinal来一步获得输出。 – vikas 2010-08-13 10:06:26