Asp.net MVC - Как хэшировать пароль
Как мне хэшировать ввод пользователя (пароль) в базу данных, а затем читать хешированный пароль при входе в систему?
Я считаю, что решение заключается в хешировании пароля при регистрации, где пароль сохраняется как хешированный внутри БД. Позже при входе в систему он должен снять хеш и сравнить свой пароль с вводом пароля пользователя. Но я не знаю, как это сделать.
Я разрешил пароль иметьnvarchar(MAX)
в дб, так как хешированный пароль обычно длинный.
[Required]
[StringLength(MAX, MinimumLength = 3, ErrorMessage = "min 3, max 50 letters")]
public string Password { get; set; }
Регистр:
[HttpPost]
public ActionResult Register(User user) {
if (ModelState.IsValid) {
var u = new User {
UserName = user.UserName,
Password = user.Password
};
db.Users.Add(u);
db.SaveChanges();
return RedirectToAction("Login");
}
}return View();
}
Авторизоваться:
public ActionResult Login() {
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(User u) {
if (ModelState.IsValid)
{
using (UserEntities db = new UserEntities()) {
//un-hash password?
var v = db.Users.Where(a => a.UserName.Equals(u.UserName) && a.Password.Equals(u.Password)).FirstOrDefault();
if (v != null) {
return RedirectToAction("Index", "Home"); //after login
}
}
}return View(u);
}
Я использую базу данных в первую очередь.