Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置密码框的文本_C#_Wpf_Security_Securestring - Fatal编程技术网

C# 设置密码框的文本

C# 设置密码框的文本,c#,wpf,security,securestring,C#,Wpf,Security,Securestring,我正在创建一个需要用户登录(用户名+密码)的应用程序。由于这是一个安全的应用程序,所以我使用WPF的PasswordBox.SecurePassword安全地创建密码的哈希(使用SHA512CryptoServiceProvider,从自定义流进行哈希),以用作Rfc2898DeriveBytes的密码。假设我有一个AES-256-CBC实现,它安全地检索和存储密钥+IV,所以这不是问题我目前正在为用户实现一种存储密码的方法,这样他们就不必在每次登录时都输入密码。到目前为止,我能够使用AES自定

我正在创建一个需要用户登录(用户名+密码)的应用程序。由于这是一个安全的应用程序,所以我使用WPF的PasswordBox.SecurePassword安全地创建密码的哈希(使用SHA512CryptoServiceProvider,从自定义流进行哈希),以用作Rfc2898DeriveBytes的密码。假设我有一个AES-256-CBC实现,它安全地检索和存储密钥+IV,所以这不是问题
我目前正在为用户实现一种存储密码的方法,这样他们就不必在每次登录时都输入密码。到目前为止,我能够使用AES自定义实现安全地存储密码,并且可以安全地读取密码(也就是说,从来没有将密码以纯文本形式完全放入内存)
我遇到的问题是当我尝试替换密码框中的文本时。PasswordBox.SecurePassword是只读的,我已尝试使用PasswordBox.SecurePassword.AppendChar(someChar),但字段/值仍然为空。我认为PasswordBox.SecurePassword只返回一个副本(SecureString.copy()),而不是原始变量()
是否有任何方法可以实现我想要的或需要创建自定义WPF控件?

要在WPF中设置密码框的文本,请使用以下代码:

PasswordBox1.Password = "yourpassword";
PasswordBox1.Password;
您不需要使用SecurePassword函数,只要能够以纯文本形式获取密码,就可以使用password函数进行设置。正如您提到的,SecurePassword函数是只读的,这是因为它以安全的形式检索密码,因此不允许您设置密码框中的文本

如果您希望能够将安全密码放入密码箱中,您也可以使用此方法,但不能将其放入纯文本中,因为您实际上是在要求破坏加密,但如果您拥有密钥并且可以解密,则可以先执行此操作,然后在密码箱中设置文本

要查看以纯文本形式在密码框中输入的密码,请使用以下代码:

PasswordBox1.Password = "yourpassword";
PasswordBox1.Password;

要在WPF中设置密码框的文本,请使用以下代码:

PasswordBox1.Password = "yourpassword";
PasswordBox1.Password;
您不需要使用SecurePassword函数,只要能够以纯文本形式获取密码,就可以使用password函数进行设置。正如您提到的,SecurePassword函数是只读的,这是因为它以安全的形式检索密码,因此不允许您设置密码框中的文本

如果您希望能够将安全密码放入密码箱中,您也可以使用此方法,但不能将其放入纯文本中,因为您实际上是在要求破坏加密,但如果您拥有密钥并且可以解密,则可以先执行此操作,然后在密码箱中设置文本

要查看以纯文本形式在密码框中输入的密码,请使用以下代码:

PasswordBox1.Password = "yourpassword";
PasswordBox1.Password;

这可以认为已经解决了。

我们决定使用一个动画向用户显示他们不需要再次输入密码
很遗憾,您不能像使用普通SecureString那样,以编程方式向SecurePassword属性添加字符。

这可以被视为解决了。

我们决定使用一个动画向用户显示他们不需要再次输入密码
很遗憾,您不能像使用普通SecureString那样,通过编程方式将字符添加到SecurePassword属性。

@farbord,我正在避免使用Password属性,因为我不能冒险使用纯文本形式的密码。这就是为什么我需要一种能够将securestring附加到SecurePassword的方法。我假设您希望将SecurePassword属性更改为您存储的属性,但这样做没有意义?只需创建一个新变量并将安全密码存储在那里。然后将虚拟数据放入密码框或禁用它。您是否正在尝试将SecurePassword属性更改为已存储的属性,并使用原始密码更新PasswordBox?如果是这样的话,那么你就违背了拥有一个安全密码的全部目的,因为这样密码就会在内存中以明文形式存在。正如我在最初的回答中所说的那样。@farbord,我避免使用Password属性,因为我不能冒险使用纯文本形式的密码。这就是为什么我需要一种能够将securestring附加到SecurePassword的方法。我假设您希望将SecurePassword属性更改为您存储的属性,但这样做没有意义?只需创建一个新变量并将安全密码存储在那里。然后将虚拟数据放入密码框或禁用它。您是否正在尝试将SecurePassword属性更改为已存储的属性,并使用原始密码更新PasswordBox?如果是这样的话,那么你就违背了拥有一个安全密码的全部目的,因为这样密码就会在内存中以明文形式存在。正如我在最初的回答中所说,“因为这是一个安全的应用程序”-如果有人可以读取你的应用程序的内存,那么这个人也可以安装键盘记录程序。@CodeCaster我们强制使用防病毒的防键盘记录程序来缓解这一问题。“因为这是一个安全的应用程序”-如果有人可以读取你的应用程序的内存,此人还可以安装键盘记录器。@CodeCaster我们强制使用反键盘记录器的防病毒软件来缓解这一问题。