Какой простой и надежный способ хэширования пароля 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
195 +1
0
Ответы
1

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

public string HashPassword(string password)
{
using (var sha256 = new SHA256Managed())
{
byte[] bytes = Encoding.UTF8.GetBytes(password);
byte[] hash = sha256.ComputeHash(bytes);
return BitConverter.ToString(hash).Replace("-", "").ToLower();
}
}

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

[HttpPost]
public ActionResult Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
// Хэшируем пароль перед сохранением
string hashedPassword = HashPassword(model.Password);
User user = repository.Users().FirstOrDefault(m => m.Login == model.Login);
if (user == null)
{
repository.Add(new User { Login = model.Login, Password = hashedPassword });
// Проверяем, что пользователь был успешно добавлен и аутентифицируем его
user = repository.Users().FirstOrDefault(m => m.Login == model.Login && m.Password == hashedPassword);
if (user != null)
{
authProvider.Authenticate(model.Login);
return RedirectToAction("Index", "Document");
}
}
else
{
ModelState.AddModelError("", "Пользователь с таким логином уже существует");
}
}
return View(model);
}
[HttpPost]
public ActionResult Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
// Хэшируем введенный пароль для сравнения с хэшированным паролем в базе данных
string hashedPassword = HashPassword(model.Password);
User user = repository.Users().FirstOrDefault(m => m.Login == model.Login && m.Password == hashedPassword);
if (user != null)
{
authProvider.Authenticate(model.Login);
return RedirectToAction("Index", "Document");
}
else
{
ModelState.AddModelError("", "Неверный логин или пароль");
}
}
return View(model);
}

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

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 706 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир