删除String的内容

时间:2017-02-10 09:09:59

标签: c# garbage-collection securestring

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

1 个答案:

答案 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