代码之家  ›  专栏  ›  技术社区  ›  Jirka Hanika

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

  •  -1
  • Jirka Hanika  · 技术社区  · 6 年前

    在概念级别上,SecureString看起来像是ProtectedMemory的一个专门化。

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

    在我看来,如果在实现中没有使用密码技术,那么SeCuSLIP将只提供在现有的StrugBuudor之上的最小的便利性。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Jirka Hanika    6 年前

    我刚发现 SecureString 不加密.NET Core中的内部存储;即 不应用于新开发(DE0001);除非我从 安全字符串 通过 Marshal.SecureStringToGlobalAllocUnicode ,即使是在.NET的情况下,我最终还是会让未加密的字符串在托管堆的第0代上跳舞。因此,公平地说 基本上只是一个装饰 StringBuffer 而其类名所暗示的“安全性”更多地与易变性有关,而不是与密码学有关。

    Damien_The_Unliever在其不再可见的评论中显示,这与这两个类的文档记录方式一致(从.NET 2添加它们之后的所有时间):

    安全字符串 ProtectedMemory 特别是说它用于访问DPAPI。其中一个可以使用另一个(或底层技术)作为实现细节,并不意味着这应该决定它的归属。

    推荐文章