2009-12-08 32 views
1

我想創建一個文件「myFile」,它使用特定的密鑰加密第一部分,並使用特定的密鑰對最後一部分進行加密。到目前爲止,我有這樣的事情:與C#中的一個文件相關聯的兩個CryptoStreams

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的,這似乎是雖然它不是作爲清潔工作,我所希望的。謝謝您的幫助!

回答

1

我認爲你應該至少在while循環之後調用cs1.FlushFinalBlock()(對於cs2也是如此)。

並在之後創建cs2 您已完成cs1。您可能需要調查是否關閉cs1關閉myFile流,StreamReaders會這樣做,但我在CryptoStream文檔中沒有看到它。

0

在每個while循環後嘗試以下操作。

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

或者甚至更好,使用using塊並在cs1已被處置後創建cs2。

相關問題