我有一个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
这样的内容并且它不是安全
问题:
如何在不保存用户密码的情况下执行此操作?
如果我需要保存一些信息,如何加密?
是否有必要更改我的安全政策?
请注意,这是为客户端创建的客户端/服务器应用程序和登录表单。
答案 0 :(得分:1)
您可以在本地数据库中保存密码的哈希值,并且可以使用隐藏的复选框,该复选框告诉您已填充已经哈希的数据库中的信息,并且在询问身份验证时您不需要哈希密码值。
编辑如果用户尝试手动输入密码,则可以清除文本框值并更改复选框选中的值,以便您现在知道该值不是哈希值。 / p>
答案 1 :(得分:0)
据我了解,如果您想拥有remember me
功能,那么您应该/必须以任何形式存储您的密码以对用户进行身份验证。
一种方法是,在您的产品中有2个功能。一个有Hash
,这将在数据库中,我认为你现在正在这样做。除此之外,还具有Encrypt/Decrypt的功能。选中remember me
后,只需将加密值保存在app.config
文件中即可。现在,当用户再次打开应用程序时,请检查加密密码并解密以验证用户身份。
用户dbw
刚刚发布了我的其他方法:)
希望它有所帮助。
答案 2 :(得分:0)
当然,你可以欺骗用户(我会告诉你如何),但需要定义你希望用户做什么:
答案 3 :(得分:0)
在Windows上具有此功能。 DataProtector和ProtectedData类可用于基于计算机信息加密二进制数据。您可以将加密范围指定为“基于用户”或“基于系统”,这可以派上用场。
如果您认为更好,则只能序列化登录令牌信息,而不能序列化用户凭据。
您只需加密序列化信息并将其存储在所需的任何位置。并在启动时使用它解密并反序列化。
我想是的。
您可以在此处查看它们: