我想压缩然后加密我的数据,并且为了提高速度(不必写入字节数组并返回),决定将用于压缩和加密的流链接在一起.
它在我写入(压缩和加密)数据时工作得很好,但是当我尝试读取数据(解压缩和解密)时,Read操作中断 - 简单地调用Read一次读取0字节,因为第一个Read总是返回0.循环,如下面的代码几乎可以工作,除了在某一点,Read停止返回任何> 0,即使仍有数据要读取.
在最后几个字节之前的所有内容都被完全解压缩和解密.
对于相同的明文,当发生这种情况时剩余的字节数保持不变; 例如,某个字符串总是9个字节,但另一个字符串总是1个字节.
以下是相关的加密和解密代码; 关于什么可能出错的任何想法?
加密:
// Create the streams used for encryption.
using (MemoryStream msEncrypt = new MemoryStream())
{
using (ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV))
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
using (DeflateStream zip = new DeflateStream(csEncrypt, CompressionMode.Compress, true))
{
zip.Write(stringBytes, 0, stringBytes.Length);
csEncrypt.FlushFinalBlock();
Run Code Online (Sandbox Code Playgroud)
解密:
// Create the streams used for decryption.
using (MemoryStream msDecrypt = new MemoryStream())
{
// Writes the actual data (sans prepended headers) to the stream
msDecrypt.Write(stringBytes, prependLength, …Run Code Online (Sandbox Code Playgroud)