如何散列用戶輸入(密碼)到數據庫,然後在登錄過程中讀取散列密碼?Asp.net MVC - 如何散列密碼
我相信解決辦法是在註冊時散列密碼,密碼保存爲db內的散列。稍後登錄時,它應該取消散列並將其密碼與用戶密碼輸入進行比較。 但我不知道該怎麼做。
我允許密碼在db中擁有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);
}
我使用數據庫第一。
你做**不**加密密碼。你哈希他們。 –
@StephenMuecke謝謝!我修好了它。 – Ezony
爲什麼你不使用身份,這將全部開箱即用?如果你想手動做所有這些,然後參考[這個博客](https://crackstation.net/hashing-security.htm) –