2010-10-28 77 views
1

我知道有SecureString类,但对于大多数情况下,我不认为它是非常有用的。我应该如何管理.net中的密码字符串?

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

那么,有没有办法避免密码字符串浮动,直到GC决定回收内存?即使如此,内存在被再次使用之前会被擦除吗?

+0

你试图解决的实际问题是什么? – 2010-10-28 10:44:50

+0

如果你想要更安全的applcation然后使用集成认证 – 2010-10-28 10:45:34

+0

@Mitch小麦:我希望能够以安全的方式使用SecureString的内容。 – raven 2010-10-28 11:05:39

回答

3

SecureString是时间还没有完全到达的好主意。它是在以下情况下最有用:

  1. 表示层密码箱单独抓住每一个按键,并将其充塞到SecureString一次一个。该类公开了专门设计的几种变异方法来促进这一点。例如,WPF支持这个(通过PasswordBox.SecurePassword控件属性)。
  2. 您的身份验证API原生接受类型为SecureString的密码。

如果这些是不真实的,那么你几乎浪费你的时间,因为在代码路径的某一点,你将被迫在SecureString解压到一个String

验证用户的最安全方法总是避免完全处理用户名/密码凭据。您可以使用Windows身份验证,InfoCards,OpenID等。

+0

为什么downvote?听起来很合理... – raven 2010-10-28 10:55:25

+0

我接受这个,因为它是最完整的答案,虽然考虑后,我很喜欢dbemerlin的建议。 – raven 2010-11-12 11:00:33

1

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

+0

那又如何?无论如何,我需要一个不变的字节数组,每个密码字节都是纯文本的。 – raven 2010-10-28 10:59:55

相关问题