У меня есть страница входа, которая берет пароль и совпадает с паролями, хранящимися в базе данных, и эти пароли хранятся в текстовых текстах. В той же таблице у меня есть другой столбец, который имеет все пароли в зашифрованном виде «SHA512». Так что я действительно хочу сделать, это совместить пароль ввода пользователя с зашифрованными паролями и выполнить операцию входа в систему.Входная страница Mvc с использованием структуры linq и сущности
` public ActionResult Login()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(CustomerCallerList c)
{
if (ModelState.IsValid)
{
using (AdcoDBEntities AdcoDB = new AdcoDBEntities())
{
var v = AdcoDB.CustomerCallerLists.Where(a => a.Name.Equals(c.Name) && a.Password.Equals(c.Password)).FirstOrDefault();
if (v != null)
{
Session["LoginID"] = v.ID.ToString();
Session["LoginUser"] = v.Name.ToString();
return RedirectToAction("AfterLogin");
}
}
}
return View(c);
}`
Это мой контроллер для сопоставления с текстовыми паролями.
мой взгляд выглядит следующим образом
`@model MvcWebSite.Models.CustomerCallerList
@{
ViewBag.Title = "Login";
}
<h2>Login</h2>
@using (Html.BeginForm("Login","Home",FormMethod.Post))
{
@Html.AntiForgeryToken() //this is for prevent CSRF attack
@Html.ValidationSummary(true)
if (@ViewBag.Message != null)
{
<div>
@ViewBag.Message
</div>
}
<table>
<tr>
<td>@Html.LabelFor(a=>a.Name)</td>
<td>@Html.TextBoxFor(a=>a.Name)</td>
<td>@Html.ValidationMessageFor(a=>a.Name)</td>
</tr>
<tr>
<td>@Html.LabelFor(a=>a.Password)</td>
<td>@Html.TextBoxFor(a=>a.Password)</td>
<td>@Html.ValidationMessageFor(a=>a.Password)</td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="Login" />
</td>
</tr>
</table>
}
@section Scripts{
@Scripts.Render("~/bundles/jqueryval")
}'
Это измененный код для согласования с шифрованием столбца
` public ActionResult Login(CustomerCallerList c)
{
if (ModelState.IsValid)
{
using (AdcoDBEntities AdcoDB = new AdcoDBEntities())
{
var passwordBytes = Encoding.UTF8.GetBytes(c.PasswordSHA);
byte[] hashBytes;
using (var sha = new SHA512Managed())
{
hashBytes = sha.ComputeHash(passwordBytes);
}
var sb = new StringBuilder(hashBytes.Length * 2);
foreach (var b in hashBytes)
sb.AppendFormat("{0:x2}", b);
var hashStr = sb.ToString();
var v = AdcoDB.CustomerCallerLists.Where(a => a.Name.Equals(c.Name) && a.Password.Equals(hashStr)).FirstOrDefault();
if (v != null)
{
Session["LoginID"] = v.ID.ToString();
Session["LoginUser"] = v.Name.ToString();
return RedirectToAction("AfterLogin");
}
}
}
return View(c);
}`
Вы не хотите изобретать велосипед, когда речь идет о безопасности. Используйте идентификатор ASP.NET для управления пользователями, проверки подлинности и авторизации. – CodeCaster