记住我复选框

时间:2014-01-16 06:55:06

标签: c# winforms security hash salt

我有一个winform应用程序,其中包含用户登录表单。我将用户登录信息存储在数据库中,包含3个参数:用户名,哈希密码,盐:

salt = random string that will be stored in database for every user
hashed password = MD5(MD5(inputPassword) + MD5(salt))

我希望在我的登录表单中有一个名为Remember me的复选框,当用户输入正确的信息并进行检查时,下次用户打开程序时,将自动输入用户信息,用户只需点击login按钮。

我无法直接保存输入的密码,然后下次填写密码textBox,因为我知道某些软件可以读取textBox这样的内容并且它不是安全

问题:

  1. 如何在不保存用户密码的情况下执行此操作?

  2. 如果我需要保存一些信息,如何加密?

  3. 是否有必要更改我的安全政策?

  4. 请注意,这是为客户端创建的客户端/服务器应用程序和登录表单。

4 个答案:

答案 0 :(得分:1)

您可以在本地数据库中保存密码的哈希值,并且可以使用隐藏的复选框,该复选框告诉您已填充已经哈希的数据库中的信息,并且在询问身份验证时您不需要哈希密码值。

编辑如果用户尝试手动输入密码,则可以清除文本框值并更改复选框选中的值,以便您现在知道该值不是哈希值。 / p>

答案 1 :(得分:0)

据我了解,如果您想拥有remember me功能,那么您应该/必须以任何形式存储您的密码以对用户进行身份验证。

一种方法是,在您的产品中有2个功能。一个有Hash,这将在数据库中,我认为你现在正在这样做。除此之外,还具有Encrypt/Decrypt的功能。选中remember me后,只需将加密值保存在app.config文件中即可。现在,当用户再次打开应用程序时,请检查加密密码并解密以验证用户身份。

用户dbw刚刚发布了我的其他方法:)

希望它有所帮助。

答案 2 :(得分:0)

恕我直言,这是无法做到的。如果您正在加密/散列/腌制并在DB中保存密码,那么您无法以纯文本形式将其恢复。

当然,你可以欺骗用户(我会告诉你如何),但需要定义你希望用户做什么:

  • 即使用户要求“记住我”,也要再次输入密码(每次)。这可以轻松完成,只需检索用户ID并将密码框保留为空白即可。没有技巧。干净利落。即便谷歌也会为他们的网站做这件事。
  • 现在欺骗时间。让用户输入没有密码但只是用户名的应用程序。您只需在密码框中输入一些默认值(用户会认为密码实际上已被检索,但您将编程这样一种方式,只要选择“记住我”选项,您只需填写此信息)并让用户进入但是这不是一个好选择,因为使用该系统的任何人都可以登录到您的应用程序。您必须根据安全要求接听电话。

答案 3 :(得分:0)

在Windows上具有此功能。 DataProtector和ProtectedData类可用于基于计算机信息加密二进制数据。您可以将加密范围指定为“基于用户”或“基于系统”,这可以派上用场。

  1. 如果您认为更好,则只能序列化登录令牌信息,而不能序列化用户凭据。

  2. 您只需加密序列化信息并将其存储在所需的任何位置。并在启动时使用它解密并反序列化。

  3. 我想是的。

您可以在此处查看它们:

https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.dataprotector?view=netframework-4.7.2

https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.protecteddata?view=netframework-4.7.2