Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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#_.net_Winforms_Passwords - Fatal编程技术网

C# 如何从内存中删除带有密码的文本框?

C# 如何从内存中删除带有密码的文本框?,c#,.net,winforms,passwords,C#,.net,Winforms,Passwords,我有一个简单的登录表单 在用户拥有数字密码后,我需要将文本框销毁到内存中 这样做够了吗 txtPassword.Text = string.Empty; txtPassword = null; System.GC.Collect(); 我想你可能会对我感兴趣 System.String类的实例是不可变的,当不再需要时,不能以编程方式安排垃圾收集;也就是说,实例创建后是只读的,并且无法预测实例何时将从计算机内存中删除。因为System.String实例是不可变的,所以看起来修改现有实例的操作实

我有一个简单的登录表单

在用户拥有数字密码后,我需要将文本框销毁到内存中

这样做够了吗

txtPassword.Text = string.Empty;
txtPassword = null;
System.GC.Collect(); 

我想你可能会对我感兴趣

System.String类的实例是不可变的,当不再需要时,不能以编程方式安排垃圾收集;也就是说,实例创建后是只读的,并且无法预测实例何时将从计算机内存中删除。因为System.String实例是不可变的,所以看起来修改现有实例的操作实际上会创建一个要操作的实例副本。因此,如果字符串对象包含敏感信息,如密码、信用卡号或个人数据,则在使用该信息后可能会泄露该信息,因为您的应用程序无法从计算机内存中删除该数据

SecureString对象类似于String对象,因为它具有文本值。但是,如果SecureString对象的值固定在内存中,则可以使用底层操作系统提供的保护机制(如加密),直到应用程序将其标记为只读,并且可以通过应用程序调用Dispose方法或.NET Framework垃圾收集器从计算机内存中删除


我想你可能会对我感兴趣

System.String类的实例是不可变的,当不再需要时,不能以编程方式安排垃圾收集;也就是说,实例创建后是只读的,并且无法预测实例何时将从计算机内存中删除。因为System.String实例是不可变的,所以看起来修改现有实例的操作实际上会创建一个要操作的实例副本。因此,如果字符串对象包含敏感信息,如密码、信用卡号或个人数据,则在使用该信息后可能会泄露该信息,因为您的应用程序无法从计算机内存中删除该数据

SecureString对象类似于String对象,因为它具有文本值。但是,如果SecureString对象的值固定在内存中,则可以使用底层操作系统提供的保护机制(如加密),直到应用程序将其标记为只读,并且可以通过应用程序调用Dispose方法或.NET Framework垃圾收集器从计算机内存中删除

将其设置为:

txtPassword.PasswordChar = '\0';
将其设置为:

txtPassword.PasswordChar = '\0';

实际上,调用
GC
不是一件很好的事情。文本仍然可以在
文本框中
;您可能引用的其他变量或对象。您可能需要考虑WPF的代码>密码框< /COD>和<代码> ScReString 简单地<代码> TXTPASSWORD.Trime= String。code>不起作用?@MickyD I翻译SecureStrings中的文本可能与
GC
的实际调用重复不是一件很好的事情。不。文本仍然可以在
文本框中
;您可能引用的其他变量或对象。您可能需要考虑WPF的代码>密码框< /COD>和<代码> ScReString 简单地<代码> TXTPASSWORD.Trime= String。代码>不起作用?@MickyD I传输SecureString中的文本可能与我在SecureString中传输的数据字符串重复,但我需要使用密码和转换字符串变量销毁文本框到内存中。不足。WinForms(OP问题的主题)不支持
Text
属性或类似属性的
SecureString
,这与WPF的
PasswordBox
不同
PasswordBox
甚至没有
string Text
属性,而是
SecureString SecurePassword
。这为适合密码的安全字符串建立了基础。试图使用
SecureString
作为WinForms的事后考虑是错误的risky@daniele3004-将数据从
字符串
传输到
安全字符串
是无用的(因为
字符串
仍在内存中,您不会那么容易地将其删除;这就是您的问题所在)。
SecureString
的安全性只能通过在(不安全的)内存中从不使用“完整的”
string
来实现。你一个字符一个字符地添加它,按一个键一个键地添加。就像链接的MSDN文章中的示例一样。我在SecureString中传输了数据字符串和之后的内容,但我需要将带有密码的文本框和转换字符串变量销毁到内存中。不足。WinForms(OP问题的主题)不支持
Text
属性或类似属性的
SecureString
,这与WPF的
PasswordBox
不同
PasswordBox
甚至没有
string Text
属性,而是
SecureString SecurePassword
。这为适合密码的安全字符串建立了基础。试图使用
SecureString
作为WinForms的事后考虑是错误的risky@daniele3004-将数据从
字符串
传输到
安全字符串
是无用的(因为
字符串
仍在内存中,您不会那么容易地将其删除;这就是您的问题所在)。
SecureString
的安全性只能通过在(不安全的)内存中从不使用“完整的”
string
来实现。你一个字符一个字符地添加它,按一个键一个键地添加。如链接MSDN文章中的示例。请添加(简短)解释。我知道您打算重写字符串,使其不再包含文本,也不再包含密码。你能给出你的答案吗?请加上(简短的)解释。我知道您打算重写字符串,使其不再包含文本,因此不包含