Beispiel #1
0
        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));
        }
Beispiel #2
0
        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));
        }