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

时间:2017-07-29 15:55:17

标签: encryption streaming decode encode

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

在加密过程中我:

  • 加密数据
  • Base64 对其进行编码

解密期间:

  • Base64 解码
  • 解密数据

工作正常。现在我尝试在流式缓冲区上执行此过程。让我们假设加密是通过上述程序对大部分数据进行的,只有解密才会在流式传输时发生。

在这种情况下,缓冲区大小 / 块大小是否在解码时我对数据进行了编码?

如果我在3000字节的缓冲区中编码数据,我是否还应读取最多3000字节并解码?或者这不重要吗?

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

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

  1. 获取一些字节
  2. 解码
  3. 解密
  4. 保存到文件
  5. 对于解密的下一组字节,请继续附加到同一文件。
  6. 这种方式似乎适用于某些大小的数据,而不适用于其他数据。数据的最终大小类似于lexx 2-4字节

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

    如果是后者,我会深入挖掘检查。

    谢谢你 沙比尔

1 个答案:

答案 0 :(得分:0)

为上述提示感到满意。我能够解决我遇到的问题。

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

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

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

CipherOutputStream cipherOutputStream = new CipherOutputStream(byteArrOutputStream, cipher);

这对流中的所有块都进行了一次,并且有效。

感谢
沙比尔