我正在创建一个需要用户登录的应用程序(用户名+密码)。由于这是一个安全的应用程序,我使用WPF的PasswordBox.SecurePassword安全地创建密码哈希(使用SHA512CryptoServiceProvider,从自定义流中散列)以用作Rfc2898DeriveBytes的密码。让我们说我有一个AES-256-CBC实现,可以安全地检索和存储密钥+ IV,这不是问题。
我目前正在实施一种方法,让用户能够存储密码,这样他们就不必在每次登录时都放置密码。到目前为止,我可以使用AES自定义安全地存储密码实现,我可以安全地读取密码(也就是说,没有将它完全放在内存中以纯文本形式)。
我遇到的问题是当我尝试替换PasswordBox中的文本时。 PasswordBox.SecurePassword是只读的,我试图使用PasswordBox.SecurePassword.AppendChar(someChar),但字段/值仍为空。我想PasswordBox.SecurePassword只返回一个副本(SecureString.Copy())而不是原始变量(looking at .NET source code confirms this)。
有什么方法可以实现我想要或创建的自定义WPF控件吗?
答案 0 :(得分:4)
要在WPF中设置PasswordBox的文本,请使用以下代码:
PasswordBox1.Password = "yourpassword";
您不需要使用SecurePassword功能,只要您能够以纯文本格式获取密码,然后您就可以使用密码功能进行设置。正如您所提到的,SecurePassword函数是只读的,因为它以安全的形式检索密码,它不允许您在PasswordBox中设置文本。 MSDN Documentation
如果您希望能够将安全密码放在PasswordBox中,您也可以使用此方法,但不能将其放在纯文本中,因为您实际上要求打破加密,但如果您有密钥然后你可以解密它,然后先做,然后在PasswordBox中设置文本。
要以纯文本格式查看在PasswordBox中输入的密码,请使用以下代码:
PasswordBox1.Password;
答案 1 :(得分:1)
这可以被认为是可以解决的。
我们决定使用动画向用户显示他们不需要再次输入密码。惭愧的是,您无法以编程方式将字符添加到SecurePassword属性,就像使用普通的SecureString一样。