Какой простой и надежный способ хэширования пароля ASP.NET MVC? Нужен простой и надежный способ хэширования пароля в контроллере AccountCOntroller
Выглядит он так:public class AccountController : Controller {
private IAuthProvider authProvider;
private IUserRepository repository;
public AccountController(IAuthProvider auth, IUserRepository repo) {
authProvider = auth;
repository = repo;
}
public ViewResult Login() {
return View();
}
public ViewResult Register() {
return View();
}
[HttpPost]
public ActionResult Login(LoginViewModel model) {
if (ModelState.IsValid) {
User user = repository.Users().FirstOrDefault(m => m.Login == model.Login && m.Password == model.Password);
if(user != null) {
authProvider.Authenticate(model.Login);
return RedirectToAction("Index", "Document");
} else {
ModelState.AddModelError("", "Неверный логин или пароль");
}

}
return View(model);
}
[HttpPost]
public ActionResult Register(RegisterViewModel model) {

if (ModelState.IsValid) {
User user = repository.Users().FirstOrDefault(m => m.Login == model.Login);
if (user == null) {
repository.Add(new User { Login = model.Login, Password = model.Password });
user = repository.Users().Where(m => m.Login == model.Login && m.Password == model.Password).FirstOrDefault();
if (user != null) {
authProvider.Authenticate(model.Login);
return RedirectToAction("Index", "Document");
}
} else {
ModelState.AddModelError("", "Пользователь с таким логинм уже есть");
}

}
return View(model);
}
public ActionResult ExitToStore() {
authProvider.Exit();
return RedirectToAction("Login");
}
}

21 Авг 2019 в 07:12
221 +1
0
Ответы
1

Для хэширования пароля в ASP.NET MVC можно использовать библиотеку System.Security.Cryptography, в частности классы SHA256Managed или SHA512Managed. Ниже приведен пример простой функции для хэширования пароля с использованием SHA256:

public string HashPasswordstringpasswordstring passwordstringpassword {
using varsha256=newSHA256Managed()var sha256 = new SHA256Managed()varsha256=newSHA256Managed() {
byte bytes = Encoding.UTF8.GetBytespasswordpasswordpassword;
byte hash = sha256.ComputeHashbytesbytesbytes;
return BitConverter.ToStringhashhashhash.Replace"−","""-", """","".ToLower;
}
}

Вы можете добавить эту функцию в ваш контроллер AccountController и использовать ее для хэширования паролей перед сохранением и сравнения с хэшированными паролями в базе данных:

HttpPostHttpPostHttpPost public ActionResult RegisterRegisterViewModelmodelRegisterViewModel modelRegisterViewModelmodel {
if ModelState.IsValidModelState.IsValidModelState.IsValid {
// Хэшируем пароль перед сохранением
string hashedPassword = HashPasswordmodel.Passwordmodel.Passwordmodel.Password;
User user = repository.Users.FirstOrDefault(m => m.Login == model.Login);
if user==nulluser == nulluser==null {
repository.AddnewUserLogin=model.Login,Password=hashedPasswordnew User { Login = model.Login, Password = hashedPassword }newUserLogin=model.Login,Password=hashedPassword;
// Проверяем, что пользователь был успешно добавлен и аутентифицируем его
user = repository.Users.FirstOrDefault(m => m.Login == model.Login && m.Password == hashedPassword);
if user!=nulluser != nulluser!=null {
authProvider.Authenticatemodel.Loginmodel.Loginmodel.Login;
return RedirectToAction"Index","Document""Index", "Document""Index","Document";
}
}
else
{
ModelState.AddModelError"","Пользовательстакимлогиномужесуществует""", "Пользователь с таким логином уже существует""","Пользовательстакимлогиномужесуществует";
}
}
return Viewmodelmodelmodel;
}
HttpPostHttpPostHttpPost public ActionResult LoginLoginViewModelmodelLoginViewModel modelLoginViewModelmodel {
if ModelState.IsValidModelState.IsValidModelState.IsValid {
// Хэшируем введенный пароль для сравнения с хэшированным паролем в базе данных
string hashedPassword = HashPasswordmodel.Passwordmodel.Passwordmodel.Password;
User user = repository.Users.FirstOrDefault(m => m.Login == model.Login && m.Password == hashedPassword);
if user!=nulluser != nulluser!=null {
authProvider.Authenticatemodel.Loginmodel.Loginmodel.Login;
return RedirectToAction"Index","Document""Index", "Document""Index","Document";
}
else
{
ModelState.AddModelError"","Неверныйлогинилипароль""", "Неверный логин или пароль""","Неверныйлогинилипароль";
}
}
return Viewmodelmodelmodel;
}

Таким образом, вы можете использовать функцию HashPassword для хэширования паролей перед их сохранением в базе данных и для сравнения с хэшированными значениями при авторизации пользователей.

20 Апр 2024 в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир