C# C中与一个文件关联的两个加密流#

C# C中与一个文件关联的两个加密流#,c#,cryptography,filestream,cryptostream,C#,Cryptography,Filestream,Cryptostream,我想创建一个文件“myFile”,它使用某个密钥加密第一部分,使用某个密钥加密最后一部分。到目前为止,我有这样的想法: cs1 = new CryptoStream(myFile, symmetricKey1.CreateEncryptor(key1, key1IV), CryptoStreamMode.Write); cs2 = new CryptoStream(myFile, symmetricKey2.CreateEncryptor(key2, key2IV), CryptoStream

我想创建一个文件“myFile”,它使用某个密钥加密第一部分,使用某个密钥加密最后一部分。到目前为止,我有这样的想法:

cs1 = new CryptoStream(myFile, symmetricKey1.CreateEncryptor(key1, key1IV), CryptoStreamMode.Write);

cs2 = new CryptoStream(myFile, symmetricKey2.CreateEncryptor(key2, key2IV), CryptoStreamMode.Write);
while((data = fs1.readByte()) != -1){
    cs1.WriteByte(data);
}

while((data = fs2.readByte()) != -1){
    cs2.WriteByte(data);
}
我想用cs1写文件的第一部分,用cs2写第二部分,类似这样:

cs1 = new CryptoStream(myFile, symmetricKey1.CreateEncryptor(key1, key1IV), CryptoStreamMode.Write);

cs2 = new CryptoStream(myFile, symmetricKey2.CreateEncryptor(key2, key2IV), CryptoStreamMode.Write);
while((data = fs1.readByte()) != -1){
    cs1.WriteByte(data);
}

while((data = fs2.readByte()) != -1){
    cs2.WriteByte(data);
}
这样做不会出错,但第二个加密流(cs2)实际上不会写入文件。有人知道为什么会这样吗?有更好的方法吗? 谢谢


编辑:关闭加密流似乎也会关闭我的文件,但是如果我关闭然后重新打开然后启动第二个加密流,这似乎可以工作,尽管它不像我希望的那样干净。谢谢你的帮助

我认为您至少应该在while循环之后调用cs1.FlushFinalBlock()(对于cs2也是如此)


并在完成cs1后创建cs2。您可能需要调查关闭cs1是否会关闭myFile流,StreamReaders会这样做,但我在CryptoStream文档中没有提到它。

我认为您至少应该在while循环之后调用cs1.FlushFinalBlock()(cs2也是如此)


并在完成cs1后创建cs2。您可能需要调查关闭cs1是否会关闭myFile流,StreamReaders会这样做,但我在CryptoStream文档中没有看到它。

在每次while循环后尝试以下操作

csX.Flush();
csX.Dispose();

或者更好的方法是,使用using块并在cs1被释放后创建cs2。

在每个while循环后尝试以下操作

csX.Flush();
csX.Dispose();
或者更好的方法是,使用using块并在cs1已经被释放之后创建cs2