C# System.Security.SecureString对象是不可变的还是可变的?

C# System.Security.SecureString对象是不可变的还是可变的?,c#,.net,string,security,C#,.net,String,Security,是 System.Security.SecureString 对象在.NET framework中是不可变的还是可变的?根据文档,它似乎是可变的 字符串与SecureString System.String类的实例是不可变的,当不再需要时,不能以编程方式安排垃圾收集;也就是说,实例创建后是只读的,并且无法预测实例何时将从计算机内存中删除。因为System.String实例是不可变的,所以看起来修改现有实例的操作实际上会创建一个要操作的实例副本。因此,如果字符串对象包含敏感信息,如密码、信用卡号或

System.Security.SecureString


对象在.NET framework中是不可变的还是可变的?

根据文档,它似乎是可变的

字符串与SecureString

System.String类的实例是不可变的,当不再需要时,不能以编程方式安排垃圾收集;也就是说,实例创建后是只读的,并且无法预测实例何时将从计算机内存中删除。因为System.String实例是不可变的,所以看起来修改现有实例的操作实际上会创建一个要操作的实例副本。因此,如果字符串对象包含敏感信息,如密码、信用卡号或个人数据,则在使用该信息后可能会泄露该信息,因为您的应用程序无法从计算机内存中删除该数据

SecureString对象类似于String对象,因为它具有文本值。但是,如果SecureString对象的值固定在内存中,则可以使用底层操作系统提供的保护机制(如加密),直到应用程序将其标记为只读,并且可以通过应用程序调用Dispose方法或.NET Framework垃圾收集器从计算机内存中删除


这是类的全部要点,它解决了String类的不变性问题。它的AppendChar方法是最明显的线索。考虑到你可能错误地使用它,没有太多的本地代码,你可以从中受益。