public ActionResult Register(RegisterModel reg) { if (ModelState.IsValid) { User user = new User(); Pwd_salt pwd_salt = new Pwd_salt(); user.Login = reg.Login; byte[] saltbuf = new byte[16]; // Реализует криптографический генератор случайных чисел, используя реализацию, предоставляемую поставщиком служб шифрования (CSP). RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); rng.GetBytes(saltbuf); StringBuilder sb = new StringBuilder(16); for (int i = 0; i < 16; i++) { sb.Append(string.Format("{0:X2}", saltbuf[i])); } string salt = sb.ToString(); //переводим пароль в байт-массив byte[] password = Encoding.Unicode.GetBytes(salt + reg.Password); //создаем объект для получения средств шифрования MD5CryptoServiceProvider CSP = new MD5CryptoServiceProvider(); //вычисляем хеш-представление в байтах byte[] byteHash = CSP.ComputeHash(password); StringBuilder hash = new StringBuilder(byteHash.Length); for (int i = 0; i < byteHash.Length; i++) { hash.Append(string.Format("{0:X2}", byteHash[i])); } pwd_salt.Salt = salt; user.Pwd = hash.ToString(); user.Status = 1; user.isActive = false; db.Users.Add(user); db.SaveChanges(); pwd_salt.User = db.Users.ToList()[db.Users.ToList().Count - 1]; db.Pwd_salt.Add(pwd_salt); db.SaveChanges(); return(RedirectToAction("Index")); } return(View(reg)); }
public ActionResult Index(LoginModel logon) { if (ModelState.IsValid) { if (db.Users.ToList().Count == 0) { ModelState.AddModelError("", "Wrong login!"); return(View(logon)); } var users = db.Users.Where(a => a.Login == logon.Login && a.isActive == true); if (users.ToList().Count == 0) { ModelState.AddModelError("", "Wrong login!"); return(View(logon)); } var user = users.First(); var i1 = db.Pwd_salt.ToList(); var pwds = db.Pwd_salt.Where(a => a.User.Id == user.Id); Pwd_salt pwd = pwds.First(); string salt = pwd.Salt; //переводим пароль в байт-массив byte[] password = Encoding.Unicode.GetBytes(salt + logon.Password); //создаем объект для получения средств шифрования MD5CryptoServiceProvider CSP = new MD5CryptoServiceProvider(); //вычисляем хеш-представление в байтах byte[] byteHash = CSP.ComputeHash(password); StringBuilder hash = new StringBuilder(byteHash.Length); for (int i = 0; i < byteHash.Length; i++) { hash.Append(string.Format("{0:X2}", byteHash[i])); } if (user.Pwd != hash.ToString()) { ModelState.AddModelError("", "Wrong password!"); return(View(logon)); } Session["Login"] = user.Login; Session["Status"] = user.Status; return(RedirectToAction("Page", "Home")); } return(View(logon)); }