我有一个使用对称密钥加密和解密数据的程序。
在加密过程中我:
解密过程中:
它工作正常。现在我正在尝试在流缓冲区上执行此过程。让我们假设加密是使用上述程序对大量数据完成的,并且只有在流式传输时才会进行解密。
在这种情况下,我对数据进行编码时使用的缓冲区大小/块大小是否重要?
就像我在 3000 字节的缓冲区中对数据进行编码一样,我还应该读取多达 3000 字节的数据并进行解码吗?或者这无关紧要?
同样在解密时,我是否应该使用与将数据传递到 Cipher 时相同的缓冲区大小进行解密?
我尝试使用独立程序使用不同的值,并且效果很好。但是,当我尝试流式传输时:
这样它似乎适用于某些大小的数据,而不适用于其他大小。数据的最终大小就像 lexx 一样2-4 个字节。
我在这里错过了一些重要的原则吗?还是我可能在逻辑或循环中犯了错误,导致某些字节被遗漏?
如果是后者,我会更深入地检查它。
谢谢
沙比尔
感谢上面的提示。我能够解决我遇到的问题。
正如上面的评论中提到的,在将数据解码和解密为流时,缓冲区大小本身并不重要。
但是,我遇到问题的原因是因为我正在为每个新的传入数据块初始化CipherOutputStream。
相反,当我只在开始时将它初始化一次并为单个加密数据包的所有块维护它时,流程照常工作,没有问题。
CipherOutputStream cipherOutputStream = new CipherOutputStream(byteArrOutputStream, cipher);
这对流中的所有块进行了一次,并且有效。
由于
沙比尔
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句