我需要一个变量,对它的访问将具有我的应用程序的不同形式。
在这个变量中,我想存储一个密码。我想知道如何最好地定义这个变量?通过委托?
太阳能电池板?(但是非对称密钥的 CSP,对吗?)一些隔离存储?或者只是方法,例如 Program.cs 中的静态类:
static class Data
{
public static string Value { get; set; }
}
我问这个是因为我想保护自己免受可以访问我的进程的特洛伊木马的侵害,你知道像 ArtMoney :)
我需要一个变量,对它的访问将具有我的应用程序的不同形式。
在这个变量中,我想存储一个密码。我想知道如何最好地定义这个变量?通过委托?
太阳能电池板?(但是非对称密钥的 CSP,对吗?)一些隔离存储?或者只是方法,例如 Program.cs 中的静态类:
static class Data
{
public static string Value { get; set; }
}
我问这个是因为我想保护自己免受可以访问我的进程的特洛伊木马的侵害,你知道像 ArtMoney :)
我相信您已经知道这一点,但我将重申它只是为了确保:您无法保护您的应用程序免受在同一台机器上运行的木马的侵害。你可以让他们更难。
也就是说,SecureString类确保密码在(未加密的)内存中尽可能短,从而使另一个进程更难提取该信息。
请注意,读取存储在 SecureString 中的值并不是那么容易,即使对于您自己的应用程序也是如此。可以在这篇文章中找到一个关于如何做到这一点的示例,它将其转换为 BSTR:
IntPtr bstr = Marshal.SecureStringToBSTR(password);
try
{
// ...
// use the bstr
// ...
}
finally
{
Marshal.ZeroFreeBSTR(bstr);
}
故意不将字符串转换为托管字符串,这将再次在托管内存中未加密的情况下徘徊,直到它被垃圾收集。正确的方法是直接与 BSTR 交互(在 finally 块中归零),例如,使用Marshal.ReadByte. 并且可以在本文中找到示例。
您可以为此使用 Windows ProtectedStorage。
你应该看看SecureString类。它应该将密码安全地存储在内存中。