ASP.Net使用salted hash

时间:2018-01-11 19:00:33

标签: asp.net validation hash salt password-encryption

所以我一直在遵循这些关于如何散列密码的指南。 https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/consumer-apis/password-hashing

我能够用盐哈希密码我将盐存储在数据库中,我正在从数据库中检索盐。我被绊倒的地方是;如果我正确地理解了这一点,如果你没有盐的密码,它就会出现相同的情况,如果你使用相同的盐(来自数据库)和它应该验证的散列,它会出现一个不同的散列密码。

问题: 为什么在使用数据库中存储的salt时无法获得相同的密码?

代码: 代码尝试使用存储在数据库中的salt验证密码。但我得到两个不同的密码。

string password = txtSignPass.Text;
        string email = txtSignEmail.Text;
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["db"].ToString());
        SqlCommand cmd = new SqlCommand("SELECT * FROM users WHERE email = @email;", conn);
        cmd.Parameters.AddWithValue("@email", email);
        conn.Open();
        SqlDataReader dr = cmd.ExecuteReader();

        while (dr.Read())
        {
            byte[] salt = Encoding.UTF8.GetBytes(dr["salt"].ToString());
            string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                password: password,
                salt: salt,
                prf: KeyDerivationPrf.HMACSHA1,
                iterationCount: 10000,
                numBytesRequested: 256 / 8));

0 个答案:

没有答案