CryptoStream.cs (ln 695)から:
protected override void Dispose(bool disposing) {
try {
if (disposing) {
if (!_finalBlockTransformed) {
FlushFinalBlock();
}
_stream.Close();
}
}
finally {
try {
// Ensure we don't try to transform the final block again if we get disposed twice
// since it's null after this
_finalBlockTransformed = true;
// we need to clear all the internal buffers
if (_InputBuffer != null)
Array.Clear(_InputBuffer, 0, _InputBuffer.Length);
if (_OutputBuffer != null)
Array.Clear(_OutputBuffer, 0, _OutputBuffer.Length);
_InputBuffer = null;
_OutputBuffer = null;
_canRead = false;
_canWrite = false;
}
finally {
base.Dispose(disposing);
}
}
}
あなたはあなたがCryptoStream
を配置したくない場合は、公開されFlushFinalBlock
メソッドを呼び出す必要が見ることができるように。この方法は、入力バッファと出力バッファをクリアして、使用されているCryptoStream
に機密情報が格納されないようにします。
GCが下位のStream
を閉じる可能性がありますか?いいえ。これを行うには、メソッドを引数値としてtrue
で呼び出す必要がありますが、これはStream.Close
メソッド(Stream.Dispose
から呼び出されます)でのみ行われます。 CryptoStream
がファイナライザを実装する場合でも、Finalize
を実行するときには、参照されたオブジェクトに対してDispose
を呼び出すことはお勧めできません。ファイナライザは、アンマネージリソースを解放する目的でのみ使用してください。
基本ストリームを開いたままにする必要がありますか?なぜなら、このように設計されていたからです。 –
最も安全な方法は、memorystreamを暗号化し、暗号化ストリームを破棄した後にそのバッファを使用することです。小さいデータを推薦する。 –
@HenkHoltermanはい。ストリームの一部をハッシュし、ハッシュCryptoStreamなしで残りの部分を処理し続ける必要があります。 – ispiro