我想從內存中刪除任何正常字符串的痕跡,這樣做我從正常字符串的引用創建SecureString
的實例。像這樣:在內存中燃燒System.String
public static unsafe void Burn(this string input)
{
fixed (char* c = input)
{
var secure = new SecureString(c, input.Length);
secure.Dispose();
}
}
的問題是,即使調用Dispose方法後input
內容是不改變。從我的理解SecureString
實例應該引用input
地址,因此如果從Dispose()
調用內存清理。我錯過了什麼?
它仍然存在,因爲'input'依然存在。你已經處理了'SecureString',但沒有處理'input'字符串中傳遞的原始數據。我想如果你真的想要處理一個'string',你將不得不用'SecureString'啓動*。 –
另外,如果你這樣做是爲了擺脫密碼的字符串實例,那麼你做錯了。 ;) –
即使你設法做你想做的事情(即使用指針並寫上字符串的內容),也不能保證它只是字符串的副本(即GC可能已經移動了對象10次並留下痕跡遍佈整個內存)。另外不要忘記源代碼中的字符串會被加密,所以要小心清理它們(不太可能是你想要做的事情,但是請記住)。 –