【问题标题】:How to initialize SecureString for readonly如何将 SecureString 初始化为只读
【发布时间】:2010-11-15 06:14:36
【问题描述】:

我想创建一个变量,一个安全的变量,它或多或少是一个在我的代码中使用的 CONST。我已经研究过使用 System.Security.SecureString,看起来它可能是票,因为我不希望用户找到这个密码。唯一的问题是初始化它。在大多数情况下,看起来 SecureString 最好由用户按键“设置”。我不想要这个。我遇到的一个选项如下所示:

unsafe public static void Main()
   {
      SecureString testString;
      // Define the string value to assign to a new secure string.
      char[] chars = { 't', 'e', 's', 't' };

      // Instantiate a new secure string.
      fixed(char* pChars = chars)
      {
         testString = new SecureString(pChars, chars.Length);
      }
      // Display secure string length.
      Console.WriteLine("The length of the string is {0} characters.", 
                        testString.Length);
   }

唯一的问题是,char 数组 't','e','s','t' 可能在编译后仍然打包在内存中。有没有什么好的方法可以在编译前将 SecureString 的值设置为一个常数值并对该值进行加扰?

【问题讨论】:

  • 你想完成什么?您想存储一个“秘密”密码来隐藏某些功能吗?一旦代码被泄露/被发现,你的“安全”就消失了!一个更好但仍然不是很好的解决方案是拥有您的应用程序。打电话回家。
  • (源)代码不必泄露,只需分发可执行文件就足够了!反编译可能就足够了……或者通过调试器运行它。您发送给不受信任的人的秘密不再是秘密。
  • 这个问题的根源是我必须写出一个 x509certificate2 到文件中,并用密码保护它。然后我使用相同的密码读回它。
  • 您的意思是您必须将私钥写入文件并使用密码保护它吗?您永远不必加密封装在证书中的公钥,因为它是公开的,任何人都可以使用。

标签: c# arrays char securestring


【解决方案1】:

您可以将chars 中的每个条目设置为某个强随机值,以从动态内存中删除该值。不过,该字符串仍将存在于可执行文件中。

【讨论】:

    猜你喜欢
    • 2011-05-26
    • 1970-01-01
    • 2021-01-23
    • 2021-09-20
    • 1970-01-01
    • 2014-07-17
    • 2011-02-15
    • 2019-11-06
    • 1970-01-01
    相关资源
    最近更新 更多