.NETアプリケーションのメモリから文字列を削除したいと思います。 私たちは第三者libから来て、Stringを返すDecryptionメソッドを持っているとしましょう。これはスマートではありませんが、私はそれについて何もできません。文字列の内容を削除する
String s = SomeComponent.Decrypt("cypherstring")
今、私はで動作するようにSecureString
へs
の内容をコピーします。しかし...どうすればs
を取り除くことができますか?私はGCがここでそれを集めることを知っていますが、私はその文字列をしばらく使っていればそれは残るでしょう。また、ここではGCに依存しないようにしたいと思っています。なぜなら、セキュリティに関連している可能性があるからです。
私の考えは、そのようなものです:
public static SecureString Convert(ref String s)
{
//copy content of s into SecureString
//shred s
}
ありSecureStringにデータをコピーするには大したはありませんが、どのように私はSを「破壊」しますか?
なぜそれはより安全にコピーすると思いますか?すでに出力がコピーされている新しい文字列を作成しました。そして、コードで再度使用されないとすぐにGC'dを取得します。ローカル変数の場合、GC'dはかなり速くなります。 – EpicKip
あなたが望むことをするために 'Marshall.DestroyStructure'と' Marshall.FreeHAlloc'の組み合わせを使うことができますし、 'GC.Collect'でも核実験をすることができますが、EpicKipにはおそらく必要ではない、特にローカル変数の場合は特にそうです。 – Abion47
データをもう読み込めないようにするには、少なくともsを別の値に設定することができます。したがって、現時点でGCによって処理されていない場合でも、元の文字列の内容は残っていません – Pedro