我在努力探索这个计划的目的.NET的安全字符串.来自MSDN:

系统的一个实例.String类是不可变的,当不再需要时,不能通过编程计划进行垃圾收集;也就是说,实例创建后是只读的,无法预测实例何时将从计算机内存中删除.因此,如果字符串对象包含敏感信息,如密码、信用卡号或个人数据,则在使用该信息后,由于应用程序无法从计算机内存中删除数据,因此该信息可能会被泄露.

SecureString对象类似于String对象,因为它有一个文本值.但是,SecureString对象的值会自动加密,可以修改,直到应用程序将其标记为只读,并且可以由应用程序或从计算机内存中删除.NET框架垃圾收集器.

初始化SecureString实例或修改该值时,会自动加密该实例的值.您的应用程序可以通过调用MakeReadOnly方法使实例不可变并防止进一步修改.

自动加密是最大的回报吗?

为什么我不能说:

SecureString password = new SecureString("password");

而不是

SecureString pass = new SecureString();
foreach (char c in "password".ToCharArray())
    pass.AppendChar(c);

我缺少SecureString的哪些方面?

推荐答案

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

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

.net相关问答推荐

.NET发布的应用程序运行与开发不同的端口

使用.NET 8时无法识别运行标识符

竖线在 PropertyGroup .csproj 文件中的含义

仅使用 .NET GetBytes 方法转换有效字节而不创建问号

如何在 C# 中将 HTTP 发布请求发送到另一个 API?

CustomControl 计算自己的宽度和高度 - 使用 bounds.Height=0 调用 ArrangeOverride

如何在 NET 5 / 6 中使用 Direct3D11CaptureFramePool

为什么 .net 对字符串使用 UTF16 编码,但默认使用 UTF-8 来保存文件?

在 ASP.NET MVC 中我可以在哪里放置自定义类?

如何在没有抽象基类的情况下强制覆盖后代中的方法?

如何摆脱 VS2008 中的目标程序集不包含服务类型错误消息?

共享 AssemblyInfo 用于跨解决方案的统一版本控制

如何使用反射在 .NET 中调用重载方法

ObservableCollection<> 与 List<>

Find() 和 First() 抛出异常,如何改为返回 null?

用 double 替换 int 时的 Visual Studio 长编译

内存分配:堆栈与堆?

为什么要使用 C# 类 System.Random 而不是 System.Security.Cryptography.RandomNumberGenerator?

C# - 在 WPF 应用程序中保存用户设置的方法?

如何将我的应用程序窗口置于最前面?