首页 > 解决方案 > 如何从内存中删除带密码的文本框?

问题描述

我有简单的登录表单。

用户获得数字密码后,我需要将文本框销毁到内存中。

这样做就足够了吗?

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

标签: c#.netwinformspasswords

解决方案


我想你可能对SecureString感兴趣

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

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


推荐阅读