1

特定のキーを使用して最初の部分を暗号化し、特定のキーを使用して最後の部分を暗号化するファイル「myFile」を作成したいと思います。これまでのところ、次のようなものがあります。

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

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

そして、cs1 を使用してファイルの最初の部分に書き込み、次のように cs2 を使用して 2 番目の部分に書き込みたいと思います。

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

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

これはエラーなしで続行されますが、2 番目の CryptoStream (cs2) は実際にはファイルに書き込みません。なぜこれが起こるのか誰にも分かりますか?これを行うより良い方法はありますか?ありがとう

編集:CryptoStream を閉じると myFile も閉じるように見えますが、2 つ目の 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();

または、cs1 が既に破棄された後で、using ブロックを使用して cs2 を作成することをお勧めします。

于 2009-12-08T22:12:13.923 に答える