Encoding/Decoding 和 Encrypting/Decrypting 对可变缓冲区的影响
Implications of Encoding/Decoding and Encrypting/Decrypting with variable buffers
我有一个程序可以使用对称密钥加密和解密数据。
我在加密过程中:
- 加密数据
- Base64编码
解密期间:
- Base64解码
- 解密数据
它工作正常。现在我正在尝试在流式缓冲区上执行该过程。假设加密是使用上述程序对大量数据完成的,并且只有在流式传输时才发生解密。
在这种情况下,解码数据时使用的缓冲区大小/块大小是否重要?
如果我在 3000 字节的缓冲区中编码数据,我是否也应该读取最多 3000 字节并解码?还是这无关紧要?
另外,在解密时,我是否应该 decrypt 使用与将数据传递到 Cipher 时相同的缓冲区大小?
我尝试在独立程序中使用不同的值,但效果很好。但是,当我尝试流式传输时:
- 获取一些字节
- 解码
- 解密
- 保存到文件
- 对于下一组解密的字节,继续附加到同一个文件。
这种方式似乎适用于某些大小的数据,但不适用于其他数据。数据的最终大小就像 lexx 2-4 bytes.
我是不是漏掉了一些重要的原则?还是我可能在逻辑或某个地方的循环中犯了错误,导致遗漏了一些字节?
如果是后者,我会深入研究。
谢谢
沙比尔
感谢上面的提示。我能够解决我遇到的问题。
正如上面评论中提到的,当解码和解密数据作为流时,缓冲区大小本身并不重要。
但是,我遇到问题的原因是因为我正在为每个新的传入数据块初始化 CipherOutputStream。
相反,当我只在开始时初始化一次并为单个加密数据包的所有块维护它时,流程照常工作并且没有问题。
CipherOutputStream cipherOutputStream = new CipherOutputStream(byteArrOutputStream, cipher);
这对流中的所有块都完成了一次并且有效。
谢谢
沙比尔
我有一个程序可以使用对称密钥加密和解密数据。
我在加密过程中:
- 加密数据
- Base64编码
解密期间:
- Base64解码
- 解密数据
它工作正常。现在我正在尝试在流式缓冲区上执行该过程。假设加密是使用上述程序对大量数据完成的,并且只有在流式传输时才发生解密。
在这种情况下,解码数据时使用的缓冲区大小/块大小是否重要?
如果我在 3000 字节的缓冲区中编码数据,我是否也应该读取最多 3000 字节并解码?还是这无关紧要?
另外,在解密时,我是否应该 decrypt 使用与将数据传递到 Cipher 时相同的缓冲区大小?
我尝试在独立程序中使用不同的值,但效果很好。但是,当我尝试流式传输时:
- 获取一些字节
- 解码
- 解密
- 保存到文件
- 对于下一组解密的字节,继续附加到同一个文件。
这种方式似乎适用于某些大小的数据,但不适用于其他数据。数据的最终大小就像 lexx 2-4 bytes.
我是不是漏掉了一些重要的原则?还是我可能在逻辑或某个地方的循环中犯了错误,导致遗漏了一些字节?
如果是后者,我会深入研究。
谢谢
沙比尔
感谢上面的提示。我能够解决我遇到的问题。
正如上面评论中提到的,当解码和解密数据作为流时,缓冲区大小本身并不重要。
但是,我遇到问题的原因是因为我正在为每个新的传入数据块初始化 CipherOutputStream。
相反,当我只在开始时初始化一次并为单个加密数据包的所有块维护它时,流程照常工作并且没有问题。
CipherOutputStream cipherOutputStream = new CipherOutputStream(byteArrOutputStream, cipher);
这对流中的所有块都完成了一次并且有效。
谢谢
沙比尔