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