3

我看到了这个线程:

我什么时候需要 .NET 中的 SecureString?

那里的代码:

SecureString password = new SecureString("password");

对比

SecureString pass = new SecureString();
foreach (char c in "password".ToCharArray())
    pass.AppendChar(c);

而且我确实理解第二个的好处(逐个字符添加) - 这样黑客将无法跟踪内存中随机位置的所有字符(而不是他可以找到的内存中的一个字符串)。

我不理解的部分是那部分: 在此处输入图像描述

那个黄色代码恭敬地在记忆中!

所以……好处在哪里?

4

2 回答 2

3

第二个代码示例ToCharArray()仅演示了填充安全字符串的受限方式。它不是(最佳)实践的样本。

您链接到的线程提供了大部分答案: Securestring 提供了一种避免纯文本密码(在内存中)的部分解决方案。不是一个完整的解决方案。

但是从接受的答案中获取这两点:

  • WPF 的 PasswordBox 控件在内部将密码保存为 SecureString。
  • System.Diagnostics.ProcessInfo 的 Password 属性是 SecureString。

它们一起将允许您安全地将密码传输到进程。

于 2011-12-31T13:05:07.823 回答
1

密码在某些时候总是未加密的。问题是,“持续多久?” 如果您将其在内存中保持半小时未加密,则它比几秒钟后被垃圾收集的字符串更有可能被黑客入侵。

于 2011-12-31T13:04:42.010 回答