Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 为什么SecureString和ProtectedMemory放在不同的程序集和名称空间中?_.net_Dpapi_.net Security - Fatal编程技术网

.net 为什么SecureString和ProtectedMemory放在不同的程序集和名称空间中?

.net 为什么SecureString和ProtectedMemory放在不同的程序集和名称空间中?,.net,dpapi,.net-security,.net,Dpapi,.net Security,在概念层面上,SecureString看起来像是ProtectedMemory的专门化 当然,它的主要功能是缩短RAM、交换和崩溃转储中不可变字符串的生存期。但是,它也使用DPAPI来保护除入口和出口点之外的数据。DPAPI使用加密技术来完成它的工作。那么为什么SecureString放在System.Security中而不是System.Security.Cryptography中呢 在我看来,如果在实现中没有使用加密技术,那么SecureString只能提供比现有StringBuilder更

在概念层面上,SecureString看起来像是ProtectedMemory的专门化

当然,它的主要功能是缩短RAM、交换和崩溃转储中不可变字符串的生存期。但是,它也使用DPAPI来保护除入口和出口点之外的数据。DPAPI使用加密技术来完成它的工作。那么为什么SecureString放在System.Security中而不是System.Security.Cryptography中呢

在我看来,如果在实现中没有使用加密技术,那么SecureString只能提供比现有StringBuilder更简单的便利性

在SecureString和ProtectedMemory类名中还存在安全与受保护之间的对比,我也不确定这是如何激发的。

我刚刚发现SecureString没有加密.NET Core中的内部存储;该SecureString不应在新开发DE0001中使用;除非我通过Marshal.SecureStringToGlobalAllocUnicode从SecureString中获取字符串,否则最终我仍然会让未加密的字符串在托管堆的第0代上跳舞,即使是在.NET的情况下。因此,可以公平地说,SecureString基本上只是一个修饰过的StringBuffer,其类名所指的安全性更多地与可变性有关,而不是与密码学有关

Damien_在其不再可见的评论中表示,这与自.NET 2添加这两个类以来一直记录这两个类的方式一致:

我可以猜测这是因为它们处于不同的概念层次——SecureString承诺保护字符串,但没有说明它是如何做到的。ProtectedMemory特别指出它用于访问DPAPI。一方可以使用另一方或底层技术作为实现细节,但这并不意味着它应该属于哪一方