繁体   English   中英

如何使用存储在SQL数据库中的现有加密密码在asp.net网站中验证用户?

[英]How to validate a user in asp.net web site using the existing encrypted password stored in the SQL Database?

嗨,我在asp.net网站上使用MD5加密,通过MD5加密将密码存储到数据库中。因此,当我想使用在用户注册期间输入的凭据登录时,我无法比较现有密码从数据库到我输入的当前密码。由于存储的密码采用加密形式,我很困惑如何将加密格式与文本格式进行比较?

我正在使用Sqlserver作为数据库。

除了@Jason说的以外...我喜欢给密码加盐。

public static string CreateSalt(int byteSize)
    {
        RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
        byte[] buff = new byte[byteSize];
        rng.GetBytes(buff);
        return Convert.ToBase64String(buff);
    }

    public static string CreatePasswordHash(string pwd, string salt)
    {
        string saltAndPwd = String.Concat(pwd, salt);
        string hashedPwd = FormsAuthentication.HashPasswordForStoringInConfigFile(saltAndPwd, "sha1");
        return hashedPwd;
    }
  • 最初创建用户时,以下是过程
  • 创建盐=> CreateSalt(16)
  • 使用密码和salt创建哈希=> CreatePasswordHash(passwordEntered,salt)
  • 存储哈希密码和盐
  • 下次用户登录时,根据他们在登录表单中输入的内容验证存储的凭据=>输入的字符串PasswordHash = CreatePasswordHash(enteredPassword,saltFromDatabase)
  • 与数据库中的内容进行比较=> if(passwordHashInDatabase!= inputPasswordHash)=>错误的登录凭据

希望这可以帮助某人...

MD5是一种单向哈希,因此无法将数据库中的密码转换回纯文本。 相反,您必须使用MD5哈希算法将纯文本密码(在登录表单中输入的密码)转换为密文。

如果您肯定要以加密状态存储密码,则只需加密其纯文本密码(使用相同的密钥)并将其与数据库值进行比较即可。 苹果到苹果。 当使用相同的密钥和算法加密时,它将始终加密和解密为相同的值。

如果这似乎不能正常工作,我猜您使用的键与第一次将值存储在数据库中时所用的键不同。 仔细检查并确保加密时使用的密钥与解密时使用的密钥完全相同。 通常,我们许多人将使用计算机或用户级别的证书作为密钥,以确保该值不会被篡改或更改。

如果(相反)您正在使用MD5哈希密码,则该密码实际上并未加密。 散列完全改变了纯文本的价值,您将永远无法收回它。 这是存储密码的最安全,最智能的方法。 您只需将纯文本散列为编码值并将其保存到数据库中,然后在用户每次登录时都将其与该散列值进行比较。

我希望您正在散列而不加密。 绝对是密码存储方面的最佳实践。 它非常容易实现,并且如果您经过审核,将为您省去很多麻烦。

祝好运!

要比较MD5哈希,您需要根据用户名查询数据库,在登录名中输入,并返回已知的MD5哈希和盐(如果有的话)。 然后用已知的盐对给定的密码进行哈希处理。 然后,您可以比较两个散列是否匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM