我想从.NET应用程序的内存中删除一个String。 假设我们有一个Decryption方法,它来自第三方lib,它返回一个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'
答案 0 :(得分:0)
使用此代码:
public static SecureString Convert(ref String s)
{
//copy content of s into SecureString
SecureString secureString;
unsafe
{
fixed (char* charArray = s.ToArray())
secureString = new SecureString(charArray, s.Length);
}
//shred s
s = null;
GC.Collect();
return secureString;
}
请注意,if string的长度不能超过SecureString的最大容量。 SecureString的最大容量为65536