Hash 如何验证用户身份

Hash 如何验证用户身份,hash,md5,salt,Hash,Md5,Salt,我正在使用NH Salt MD5方法插入密码。下面是我的代码 protected string GenerateSalt() { byte[] data = new byte[0x10]; new RNGCryptoServiceProvider().GetBytes(data); return Convert.ToBase64String(data); } private string HashPassword(string password, string sa

我正在使用NH Salt MD5方法插入密码。下面是我的代码

  protected string GenerateSalt()
{
    byte[] data = new byte[0x10];
    new RNGCryptoServiceProvider().GetBytes(data);
    return Convert.ToBase64String(data);
}
 private string HashPassword(string password, string salt)
 {
     // Create an MD5 hash of the supplied password using the supplied salt as well.
     string sourceText = salt + password;
     ASCIIEncoding asciiEnc = new ASCIIEncoding();
     string hash = null;
     byte[] byteSourceText = asciiEnc.GetBytes(sourceText);
     MD5CryptoServiceProvider md5Hash = new MD5CryptoServiceProvider();
     byte[] byteHash = md5Hash.ComputeHash(byteSourceText);
     foreach (byte b in byteHash)
     {
         hash += b.ToString("x2");
     }

     // Return the hashed password
     return hash;
 }
这里我使用创建密码

 string salt = GenerateSalt();

  string password = HashPassword(txtpassword.Text, salt);
它工作正常,并将密码保存在数据库中

但是当我尝试登录时,密码不匹配

下面是我匹配密码和用户id的代码

 string password = FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text, "md5").ToString();
            SqlCommand com11 = new SqlCommand("For_Login1", con);
            com11.CommandType = CommandType.StoredProcedure;
            com11.Parameters.AddWithValue("@User_Id", ddl.SelectedItem.Text);
            com11.Parameters.AddWithValue("@Password", password);

但是密码不匹配为什么?

salt
是最后一个静态字符串(不会更改),通常保存在附加到哈希密码的数据库中。一种约定是将其保存为
散列(pwd+salt):salt

每次调用
generate()
时,您都会生成一个新的salt,因为有以下行:

new RNGCryptoServiceProvider().GetBytes(data);

这意味着您将永远无法进行身份验证。

您需要存储salt,并在登录时将其与用户密码连接起来。另外,不要为此使用MD5,它不安全。请改用bcrypt。如何实现?有链接吗?如何实现?有参考资料吗?有联系吗?或者你应该分享的东西?你应该在散列密码之前将salt连接到密码(不是加密,你希望这是一种方式)。@ydaetskcoR我感觉你不明白我写的东西。我根本不是指加密(好的,好的,散列…),我指的是同一个salt应该与同一个密码一起使用的事实,作为旁注,我提到salt也保存在DB中-通常像这样
散列(pwd+salt):salt
和第一部分:
散列(pwd+salt)
我指的是
@Gaurav这里有几个链接:和