【发布时间】:2017-07-29 15:55:17
【问题描述】:
我有一个使用对称密钥加密和解密数据的程序。
在加密过程中我:
- 加密数据
- Base64对其进行编码
解密时:
- Base64 解码
- 解密数据
它工作正常。现在我正在尝试在流缓冲区上执行此过程。假设使用上述程序对大量数据进行加密,并且仅在流式传输时进行解密。
在这种情况下,我对数据进行编码的缓冲区大小/chunk-size在我解码数据时是否重要?
如果我在 3000 字节的缓冲区中编码数据,我是否也应该读取最多 3000 字节并解码?还是这无关紧要?
另外,在解密时,我是否应该解密使用与将数据传递到 Cipher 时相同的缓冲区大小?
我尝试在独立程序中使用不同的值,它工作正常。但是,当我尝试流式传输时:
- 获取一些字节
- 解码
- 解密
- 保存到文件
- 对于下一组解密的字节,请继续附加到同一文件。
这种方式似乎适用于某些大小的数据,而不适用于其他数据。并且数据的最终大小与 lexx 相差 2-4 字节。
我在这里遗漏了一些重要的原则吗?还是我可能在某个地方的逻辑或循环中犯了错误,导致一些字节被遗漏?
如果是后者,我会更深入地检查它。
谢谢
沙比尔
【问题讨论】:
-
我不知道您的加密算法是什么,但通常您需要stream-cypher algorithm 才能正确执行流内容的加密/解密。
-
“如果我将数据编码到 3000 字节的缓冲区中,我是否也应该读取最多 3000 字节并解码?还是这无关紧要?” - 是否正确实现无关紧要(使用内部“环形”缓冲区,以防您选择不能被 4 整除的块大小)。
-
缓冲区大小为 3000 我检查了流式解码字节(通过将其附加到一个文件)和批量解码字节的输出。他们似乎是平等的。但是,当我(解码+解密)并连续追加到文件时,最终输出与批量解密不同。
标签: encryption streaming decode encode