我想从.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