Hash 如何验证用户身份
我正在使用NH Salt MD5方法插入密码。下面是我的代码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
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这里有几个链接:和