【发布时间】:2010-08-13 09:56:09
【问题描述】:
我正在使用 javax.crypto 在 java 中进行 AES CBC 解密。我正在使用以下 Cipher 类方法:
-
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 来一步获取输出。
标签: java aes finalize encryption