小编典典

我什么时候需要 .NET 中的 SecureString?

all

我正在尝试了解 .NET 的 SecureString 的目的。来自 MSDN:

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 的哪个方面?


阅读 73

收藏
2022-07-31

共1个答案

小编典典

我会停止使用 SecureString 。看起来PG家伙正在放弃对它的支持。将来甚至可能拉它 -
https://github.com/dotnet/apireviews/tree/master/2015-07-14-securestring

我们应该在 .NET Core 的所有平台上从 SecureString 中删除加密 - 我们应该废弃 SecureString - 我们可能不应该在
.NET Core 中公开 SecureString

2022-07-31