PasswordBox绑定问题MVVM

时间:2013-03-09 03:34:13

标签: wpf mvvm securestring passwordbox

我遇到过密码框绑定问题。我的应用程序遵循MVVM。当我试图搜索谷歌找出如何解决密码盒绑定的问题时,我发现了两种解决方案 - 1 GT;使用附加属性 2 - ;使用安全字符串(http://www.griffinscs.com/blog/?tag=mvvm)。   由于第二种选择似乎更安全,我倾向于选择这个选项。 但后者我发现我可以使用以下代码

提取安全字符串中的实际字符串
IntPtr iPtr = Marshal.SecureStringToBSTR(securePassword);
// securePassword is of SecureString type

string str = Marshal.PtrToStringUni(iPtr);

现在我有点困惑。请帮助我理解以下问题 1 GT;使用Secure字符串真的比使用String更好吗? 2 - ;当我遵循MVVM模式并且同时希望密码字符串是安全的时,以上两个中哪一个是正确的选项。

1 个答案:

答案 0 :(得分:1)

  

使用Secure字符串确实比使用String

更好

是和否。 SecureString为您提供了如何将秘密字符串保存在内存中的选项。它们有助于防止顽皮的人使用调试器检查应用程序的内存内容以寻找机密,并且它们还提供了比常规字符串更好的保护。但是,还必须说它们是一个可以使用的PITA,而目前很少有框架实际使用它们。 This previous SO answer可能会很好地表明他们的好处。

  

当我遵循MVVM模式并且同时希望密码字符串是安全的时,以上两个中的哪一个是正确的选项

在某个阶段,您需要使用密码。很难获得SecureString的内容 - 这是安全的。但是如何获取内容并将该密码存储到您的数据库中,以便您可以将未来的登录与它进行比较?答案是SecureString没有解决这个问题 - 你仍然需要在盐之前提取真正的字符串并散列并存储它。如果输入的密码是用于创建X509Certificate2而您永远不会存储它,那么请使用SecureString。

所以答案是....
使用常规字符串,您需要自己访问字符串的内容,并使用框架方法或API函数需要的安全字符串。

这意味着如果您打算在UI中使用PasswordBox,那么您将需要访问未加密的内容,以便您可以存储它或将其与先前存储的条目相对应。