我该如何管理.net中的密码字符串?

时间:2010-10-28 10:41:41

标签: .net security string securestring

我知道有SecureString类,但在大多数情况下,我认为它并不真正有用。

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

那么,无论如何都要避免密码字符串浮动,直到GC决定回收内存?即使这样,在再次使用之前,记忆会被删除吗?

2 个答案:

答案 0 :(得分:3)

SecureString是一个好主意,时间尚未到来。它在以下场景中最有用:

  1. 您的演示文稿图层密码框会单独抓取每个按键,并一次将它们填入SecureString个按键。该类公开了几种专门为促进这一点而设计的变异方法。例如,WPF支持此功能(通过PasswordBox.SecurePassword控件属性)。
  2. 您的身份验证API原生接受SecureString类型的密码。
  3. 如果其中任何一个都是不真实的,那么你几乎要浪费你的时间,因为在代码路径的某个时刻,你将被迫将SecureString解压缩到String

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

答案 1 :(得分:1)

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