我正在尝试理解.NET 的 SecureString 的用途:
系统的实例。字符串类是不可变的,当不再需要时,不能以编程方式调度垃圾收集; 也就是说,实例在创建之后是只读的,无法预测何时从计算机内存中删除该实例。因此,如果 String 对象包含敏感信息,比如密码、信用卡号或个人数据,那么在使用该对象之后,由于应用程序无法从计算机内存中删除数据,因此该信息可能会被泄露。
SecureString 对象类似于 String 对象,因为它具有文本值。但是,SecureString 对象的值是自动加密的,可以被修改,直到应用程序将其标记为只读,并且可以通过应用程序或。NETFramework 垃圾回收器。
当实例初始化或修改值时,SecureString 实例的值将自动加密。应用程序可以通过调用 MakeReadOnly 方法使实例呈现为不可变的并防止进一步修改。
自动加密是最大的收益吗?
为什么我不能说:
SecureString password = new SecureString("password");
而不是
SecureString pass = new SecureString();
foreach (char c in "password".ToCharArray())
pass.AppendChar(c);
我遗漏了 SecureString 的哪个方面?