我在努力探索这个计划的目的.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相关问答推荐

是否存在指定的(子)索引分隔符?

F#:跨度、提升和底部类型(或缺乏)

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

如何在任务栏顶部全屏显示 Windows 窗体?

防止对话框在按钮的单击事件处理程序中关闭

使用多个 MemoryCache 实例

如何将自定义 UserControl 显示为对话框?

什么是编组?当某些东西被编组时会发生什么?

支持 HTTPS 的 Httplistener

DateTime.TryParseExact() 拒绝有效格式

无法将文件 *.mdf 作为数据库附加

将属性序列化为元素中的 Xml 属性

创建多个线程并等待所有线程完成

多个添加的实体可能具有相同的主键

ReaderWriterLockSlim 什么时候比简单的锁更好?

在任务中捕获异常的最佳方法是什么?

Environment.GetFolderPath(...CommonApplicationData) 在 Vista 上仍然返回C:\Documents and Settings\

功能说明

连接字符串而不是使用一堆 TextBlocks

如何使用 XmlSerializer 将字符串序列化为 CDATA?