但是,虽然后来将明文密码分配给密码,但此变量永远不会从内存中清除 [重复]
Posted
技术标签:
【中文标题】但是,虽然后来将明文密码分配给密码,但此变量永远不会从内存中清除 [重复]【英文标题】:However, while plaintext passwords are later assigned to password, this variable is never cleared from memory [duplicate] 【发布时间】:2019-10-16 00:57:50 【问题描述】:定义密码,即 指定包含用户密码。然而,虽然明文密码后来被分配给密码,这 变量从未从内存中清除。
var password = ConfigurationManager.AppSettings["xyz"].ToString();
为此我可以做些什么来删除堆检查?
【问题讨论】:
你能提供更多的上下文吗? 【参考方案1】:您有两个选项可以手动从内存中删除字符串内容:
选项 1:手动垃圾收集
保存密码的字符串对象所消耗的内存并没有什么特别之处。要使用手动垃圾回收从内存中删除对象,请删除对密码变量的所有引用,然后调用 System.GC.Collect()。
选项 2:使用 System.Security.SecureString
SecureString 有一个 Dispose 方法,该方法将在您使用完字符串后释放该字符串所占用的内存。我自己没有尝试过,但你应该可以这样做:
// Create a SecureString
SecureString password = new SecureString();
foreach (char c in ConfigurationManager.AppSettings["xyz"].ToString())
password.AppendChar(c);
// Use password
this.SomeMethod(password);
// Remove password
password.Dispose();
【讨论】:
以上是关于但是,虽然后来将明文密码分配给密码,但此变量永远不会从内存中清除 [重复]的主要内容,如果未能解决你的问题,请参考以下文章