Encoding/Decoding 和 Encrypting/Decrypting 对可变缓冲区的影响

Implications of Encoding/Decoding and Encrypting/Decrypting with variable buffers

我有一个程序可以使用对称密钥加密解密数据。

我在加密过程中:

解密期间:

它工作正常。现在我正在尝试在流式缓冲区上执行该过程。假设加密是使用上述程序对大量数据完成的,并且只有在流式传输时才发生解密。

在这种情况下,解码数据时使用的缓冲区大小/块大小是否重要?

如果我在 3000 字节的缓冲区中编码数据,我是否也应该读取最多 3000 字节并解码?还是这无关紧要?

另外,在解密时,我是否应该 decrypt 使用与将数据传递到 Cipher 时相同的缓冲区大小?

我尝试在独立程序中使用不同的值,但效果很好。但是,当我尝试流式传输时:

  1. 获取一些字节
  2. 解码
  3. 解密
  4. 保存到文件
  5. 对于下一组解密的字节,继续附加到同一个文件。

这种方式似乎适用于某些大小的数据,但不适用于其他数据。数据的最终大小就像 lexx 2-4 bytes.

我是不是漏掉了一些重要的原则?还是我可能在逻辑或某个地方的循环中犯了错误,导致遗漏了一些字节?

如果是后者,我会深入研究。

谢谢
沙比尔

感谢上面的提示。我能够解决我遇到的问题。

正如上面评论中提到的,当解码解密数据作为流时,缓冲区大小本身并不重要。

但是,我遇到问题的原因是因为我正在为每个新的传入数据块初始化 CipherOutputStream

相反,当我只在开始时初始化一次并为单个加密数据包的所有块维护它时,流程照常工作并且没有问题。

CipherOutputStream cipherOutputStream = new CipherOutputStream(byteArrOutputStream, cipher);

这对流中的所有块都完成了一次并且有效。

谢谢
沙比尔