我想從.NET應用程序的內存中刪除一個字符串。 假設我們有一個Decryption方法,它來自第三方庫,它返回一個String。這並不聰明,但我無能爲力。現在刪除字符串的內容
String s = SomeComponent.Decrypt("cypherstring")
我的s
內容複製到SecureString
的工作。但是......我該如何擺脫s
。我知道GC會收集在這裏,但如果我用了一段時間它會留下來。我也想在這裏不依賴GC,因爲它可能與安全有關 - 這使我的代碼具有確定性。
我的想法是這樣的事情:
public static SecureString Convert(ref String s)
{
//copy content of s into SecureString
//shred s
}
沒有什麼大不了的複製數據到SecureString的,但我怎麼「毀」 S?
爲什麼你認爲複製它會更安全?你已經創建了一個新的字符串(s)輸出複製到...並且只要它在代碼中不再被使用,它就會得到GC'd,所以如果它是一個局部變量,它會很快得到GC'd。 – EpicKip
我想你可以使用'Marshall.DestroyStructure'和'Marshall.FreeHAlloc'來組合你想做的事情,甚至可以用'GC.Collect'去核化,但我同意EpicKip可能沒有必要,特別是如果它是一個局部變量。 – Abion47
如果您不想讓數據再被讀取,您至少可以將s設置爲另一個值,因此即使GC目前不處理該數據,原始字符串內容 – Pedro