1

我知道有 SecureString 类,但对于大多数情况,我认为它并没有真正有用。

例如,假设我有一个客户端/服务器系统。服务器不需要我制作的应用程序,它甚至可以是没有集成身份验证的 SQL Server。当用户在客户端应用程序的表单上输入他的密码时,它以明文形式存储在内存中,因此,虽然我可以使用 SecureString 来读取它,但我真的看不出这样做的意义。当然,它可以减少攻击面,但不多……即使我这样做了,当用户点击“OK”时,必须生成一个纯文本字符串,即使我只需要从中计算一个哈希值。

那么,在 GC 决定回收内存之前,是否有避免密码字符串浮动的方法?即使那样,内存在再次使用之前会被擦除吗?

4

2 回答 2

3

SecureString是一个好主意,但时机尚未成熟。它在以下场景中最有用:

  1. 您的表示层密码框会单独抓取每个按键,并一次将它们塞入一个SecureString。该类公开了几个专门设计用于促进这一点的变异方法。例如,WPF 支持这一点(通过PasswordBox.SecurePassword控件属性)。
  2. 您的身份验证 API 接受SecureString本机类型的密码。

如果其中任何一个不正确,那么您几乎是在浪费时间,因为在代码路径中的某个时刻,您将被迫将其解压缩SecureStringString.

对用户进行身份验证的最安全方法始终是完全避免处理用户名/密码凭据。您可以改用 Windows 身份验证、InfoCards、OpenID 等。

于 2010-10-28T10:45:51.757 回答
1

您可以通过键生成哈希键。只需使用文本框的 OnKeyPress 事件,然后使用该附加字节计算哈希,然后在文本框中输入一些其他字符*

于 2010-10-28T10:46:17.173 回答