但是,虽然后来将明文密码分配给密码,但此变量永远不会从内存中清除 [重复]

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();

【讨论】:

以上是关于但是,虽然后来将明文密码分配给密码,但此变量永远不会从内存中清除 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

我去,同事居然用明文存储密码!!!

古典密码学总结及代码实现

古典密码学总结及代码实现

古典密码学总结及代码实现

存储密钥库密码的位置?

oracle日志是明文查看还是密文