安全数据的全局变量

Max*_*nov 3 c#

我需要一个变量,访问将具有不同形式的我的应用程序.

在这个变量中我想存储一个密码.我想知道如何最好地定义这个变量?通过代表?

CSP?(但是非对称密钥的CSP,对吧?)有些隔离存储?或者只是方法,例如Program.cs中的静态类:

static class Data
{
    public static string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我问这个是因为我想保护自己免受可以访问我的进程的特洛伊木马,你知道像ArtMoney :)

Hei*_*nzi 5

我相信你已经知道了这一点,但我会重申它只是为了确保:你无法保护你的应用程序免受在同一台机器上运行的特洛伊木马程序的影响.你可以让他们更难.

也就是说,SecureString类确保密码在(未加密的)内存中尽可能短,从而使另一个进程更难以提取该信息.

请注意,读取存储在SecureString中的值并不是那么容易,甚至对于您自己的应用程序也是如此.有关如何执行此操作的示例可以在本文中找到,它将其转换为BSTR:

IntPtr bstr = Marshal.SecureStringToBSTR(password);

try
{
    // ...
    // use the bstr
    // ...
}
finally
{
    Marshal.ZeroFreeBSTR(bstr);
}
Run Code Online (Sandbox Code Playgroud)

故意不将该字符串转换为托管字符串,该字符串将再次在托管内存中未加密的情况下停留,直到它被垃圾回收.正确的方法是直接与BSTR交互(在finally块中将其清零),例如,使用Marshal.ReadByte.并且可以在本文中找到示例.