不要將純文本密碼存儲在數據庫中。查找哈希方法。在我的例子中,我使用SHA256
。
class User
{
public string UserName { get; private set; }
public string Password { get; private set; }
public User(string userName, string plainTextPassword)
{
this.UserName = userName;
this.Password = GetHash(plainTextPassword);
}
public string GetHash(string toHash)
{
return BitConverter.ToString(new SHA256Managed().ComputeHash(Encoding.UTF8.GetBytes(toHash))).Replace("-", string.Empty);
}
public void Save() { /* Save UserName and the Hashed Password to database */ }
public bool ValidateLogin(string userNameEntered, string passwordEntered)
{
string userName; string password = string.Empty;
string ConnectionString = "Your Connection String";
using (SqlConnection con = new SqlConnection(ConnectionString))
{
con.Open();
string CommandText = "SELECT UserName, Password FROM userLogin WHERE Username = @UserName";
using (SqlCommand cmd = new SqlCommand(CommandText))
{
cmd.Connection = con;
cmd.Parameters.Add("@Username", SqlDbType.VarChar, 20).Value = userNameEntered;
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
userName = rdr["UserName"].ToString();
password = rdr["Password"].ToString();
}
}
}
if (password.Equals(GetHash(passwordEntered))) return true;
return false;
}
}
這個例子顯示了散列的一個粗略的例子,以及從數據庫中檢索。
你如何在你的服務器端代碼中訪問你的數據庫?你在使用ADO.NET嗎?你是否像使用實體框架一樣使用ORM? – Christos
如果這是一個生產環境,則不應在明碼中存儲密碼。散列密碼,存儲散列,並將用戶輸入密碼的散列與存儲的散列進行比較。也考慮使用鹽。 –