1

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

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

cs2 = new CryptoStream(myFile, symmetricKey2.CreateEncryptor(key2, key2IV), CryptoStreamMode.Write);

我想使用 cs1 写入文件的第一部分,然后使用 cs2 写入文件的第一部分,如下所示:

while((data = fs1.readByte()) != -1){
    cs1.WriteByte(data);
}

while((data = fs2.readByte()) != -1){
    cs2.WriteByte(data);
}

此过程没有错误,但第二个 CryptoStream (cs2) 实际上并未写入文件。有谁知道为什么会发生这种情况?有一个更好的方法吗?谢谢

编辑:关闭 CryptoStream 似乎也关闭了 myFile,但是如果我关闭然后重新打开然后启动第二个 CryptoStream,这似乎可以工作,尽管它不像我希望的那样干净。谢谢您的帮助!

4

2 回答 2

1

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

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

于 2009-12-08T22:10:19.033 回答
0

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

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

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

于 2009-12-08T22:12:13.923 回答