在概念层面上,SecureString看起来像是ProtectedMemory的专业化。
当然,它的主要功能是缩短RAM、交换和崩溃转储中(不可变(字符串的寿命。但是,它也使用DPAPI来保护除入口点和出口点之外的数据。DPAPI使用密码学来完成它的工作。那么,为什么SecureString被放在System.Security中,而不是放在System.Security.Cryptography中呢?
在我看来,如果在实现中不使用密码学,那么SecureString将只提供比预先存在的StringBuilder更小的便利性。
SecureString和ProtectedMemory类名中的"Secure"one_answers"Protected"之间也存在对比,我也不确定这可能是怎么回事。
我刚刚发现SecureString
不加密.NET Core中的内部存储;CCD_ 2不应用于新的开发(DE0001(;并且,除非我通过Marshal.SecureStringToGlobalAllocUnicode
从SecureString
中取出字符串,否则即使在.NET的情况下,我最终仍会让未加密的字符串在托管堆的第0代上跳舞。因此,可以公平地说,SecureString
基本上只是一个修饰的StringBuffer
,其类名所暗示的"安全性"更多地与可变性有关,而不是与密码学有关。
Damien_The_Unbeliever在他不再可见的评论中表明,这与这两个类的文档记录方式一致(自.NET 2添加以来一直如此(:
我猜这是因为它们处于不同的概念级别-
SecureString
承诺保护字符串,但没有说明它是如何做到的。ProtectedMemory
专门说它用于访问DPAPI。其中一个可以使用另一个(或底层技术(作为实现细节,但这并不意味着它应该属于哪里。