SO *_*ood 2 c# security wpf securestring
我正在创建一个需要用户登录(用户名+密码)的应用程序。由于这是一个安全的应用程序,我使用 WPF 的 PasswordBox.SecurePassword 安全地创建密码的哈希值(使用 SHA512CryptoServiceProvider,从自定义流进行哈希值)以用作 Rfc2898DeriveBytes 的密码。假设我有一个 AES-256-CBC 实现,它可以安全地检索和存储 key+IV,所以这不是问题。
我目前正在实现一种让用户能够存储密码的方法,这样他们就不必每次登录时都输入密码。到目前为止,我能够使用 AES 自定义实现安全地存储密码,并且我可以读取安全地输入密码(即,无需将其以纯文本形式完全放入内存中)。
我遇到的问题是当我尝试替换密码框中的文本时。PasswordBox.SecurePassword 是只读的,我尝试使用PasswordBox.SecurePassword.AppendChar(someChar) 但字段/值仍为空。我想PasswordBox.SecurePassword只返回一个副本(SecureString.Copy())而不是原始变量(查看.NET源代码证实了这一点)。
有什么方法可以实现我想要的或者我需要创建自定义 WPF 控件吗?
小智 6
要在 WPF 中设置密码框的文本,请使用以下代码:
PasswordBox1.Password = "yourpassword";
Run Code Online (Sandbox Code Playgroud)
您不需要使用SecurePassword功能,只要您能够以纯文本形式获取密码,然后就可以使用Password功能来设置它。正如您提到的 SecurePassword 函数是只读的,这是因为它以安全形式检索密码,它不允许您在 PasswordBox 中设置文本。MSDN 文档
如果您希望能够将安全密码放入PasswordBox中,您也可以使用此方法,但您不能将其以纯文本形式放置,因为您实际上是在要求破解加密,但如果您有密钥并且您可以解密它,然后先执行此操作,然后在密码框中设置文本。
要以纯文本形式查看在密码框中输入的密码,请使用以下代码:
PasswordBox1.Password;
Run Code Online (Sandbox Code Playgroud)