我正在尝试了解 .NET 的 SecureString 的目的。来自 MSDN:
System.String 类的实例是不可变的,并且当不再需要时,不能以编程方式安排垃圾回收;也就是说,实例在创建后是只读的,无法预测实例何时会从计算机内存中删除。因此,如果 String 对象包含密码、信用卡号或个人数据等敏感信息,则存在使用该信息后可能会泄露的风险,因为您的应用程序无法从计算机内存中删除数据。 SecureString 对象与 String 对象的相似之处在于它具有文本值。但是,SecureString 对象的值是自动加密的,可以修改,直到您的应用程序将其标记为只读,并且可以由您的应用程序或 .NET Framework 垃圾收集器从计算机内存中删除。 SecureString 实例的值在实例初始化或修改值时自动加密。您的应用程序可以通过调用 MakeReadOnly 方法使实例不可变并防止进一步修改。
System.String 类的实例是不可变的,并且当不再需要时,不能以编程方式安排垃圾回收;也就是说,实例在创建后是只读的,无法预测实例何时会从计算机内存中删除。因此,如果 String 对象包含密码、信用卡号或个人数据等敏感信息,则存在使用该信息后可能会泄露的风险,因为您的应用程序无法从计算机内存中删除数据。
SecureString 对象与 String 对象的相似之处在于它具有文本值。但是,SecureString 对象的值是自动加密的,可以修改,直到您的应用程序将其标记为只读,并且可以由您的应用程序或 .NET Framework 垃圾收集器从计算机内存中删除。
SecureString 实例的值在实例初始化或修改值时自动加密。您的应用程序可以通过调用 MakeReadOnly 方法使实例不可变并防止进一步修改。
自动加密是大回报吗?
为什么我不能说:
SecureString password = new SecureString("password");
代替
SecureString pass = new SecureString(); foreach (char c in "password".ToCharArray()) pass.AppendChar(c);
我缺少 SecureString 的哪个方面?
我会停止使用 SecureString 。看起来PG家伙正在放弃对它的支持。将来甚至可能拉它 - https://github.com/dotnet/apireviews/tree/master/2015-07-14-securestring。
我们应该在 .NET Core 的所有平台上从 SecureString 中删除加密 - 我们应该废弃 SecureString - 我们可能不应该在 .NET Core 中公开 SecureString