使用可变缓冲区进行编码/解码和加密/解密的含义



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

在加密过程中,我:

  • 加密数据
  • Base64 编码

解密期间:

  • Base64 解码它
  • 解密数据

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

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

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

同样在解密时,我是否应该使用与将数据传递到密码相同的缓冲区大小进行解密

我尝试使用独立程序使用不同的值,它工作正常。但是,当我尝试流式传输时:

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

这样,它似乎适用于某些大小的数据,而不适用于其他大小的数据。数据的最终大小类似于lexx 2-4 字节

我在这里错过了一些重要的原则吗?还是我可能在逻辑或某处的循环中犯了错误,导致遗漏了一些字节?

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


谢谢沙比尔

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

如上面的注释中所述,在将数据解码和解密为流时,缓冲区大小本身并不重要。

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

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

CipherOutputStream cipherOutputStream = new CipherOutputStream(byteArrOutputStream, cipher);

这对流中的所有块都执行了一次,并且它起作用了。

谢谢
沙比尔

最新更新