C# 在c中比较散列密码和用户输入#
我正在使用asp.net核心剃须刀引擎。我有一个保存到数据库中的密码哈希。如何将其与用户输入密码进行比较C# 在c中比较散列密码和用户输入#,c#,asp.net,hash,C#,Asp.net,Hash,我正在使用asp.net核心剃须刀引擎。我有一个保存到数据库中的密码哈希。如何将其与用户输入密码进行比较 [HttpPost] [Route("")] public IActionResult Register(Home model) { if(!ModelState.IsValid) { return View("Index", model);
[HttpPost]
[Route("")]
public IActionResult Register(Home model)
{
if(!ModelState.IsValid)
{
return View("Index", model);
}
PasswordHasher<Home> Hasher = new PasswordHasher<Home>();
model.Password = Hasher.HashPassword(model, model.Password);
userFactory.Add(model);
TempData["message"] = false;
return RedirectToAction("Index");
}
下面是我对密码进行哈希运算的方法
[HttpPost]
[Route("")]
public IActionResult Register(Home model)
{
if(!ModelState.IsValid)
{
return View("Index", model);
}
PasswordHasher<Home> Hasher = new PasswordHasher<Home>();
model.Password = Hasher.HashPassword(model, model.Password);
userFactory.Add(model);
TempData["message"] = false;
return RedirectToAction("Index");
}
[HttpPost]
[路线(“”)
公共IActionResult寄存器(主模式)
{
如果(!ModelState.IsValid)
{
返回视图(“索引”,模型);
}
PasswordHasher Hasher=新的PasswordHasher();
model.Password=Hasher.HashPassword(model,model.Password);
添加(模型);
TempData[“message”]=false;
返回操作(“索引”);
}
应用程序根据用户注册时发送的电子邮件检索用户密码。我不知道如何将散列密码与用户提供的密码进行比较。为什么密码散列器需要模型类型和模型本身作为输入?你要做的是使用一个哈希器,在相同的密码输入下总是返回相同的结果(或者,现在,在相同的两个输入下:一个密码和一个随机生成的SALT,存储在密码旁边) 下面是如何正确地执行此操作:
换句话说,扔掉当前的hasher,创建一个只需要密码(最好是salt)作为输入的hasher。您使用与“登录”密码完全相同的代码行对新创建的密码进行哈希-然后将登录哈希与存储的哈希进行比较,以查看它们是否匹配。为什么密码哈希器需要模型类型和模型本身作为输入?你要做的是使用一个哈希器,在相同的密码输入下总是返回相同的结果(或者,现在,在相同的两个输入下:一个密码和一个随机生成的SALT,存储在密码旁边) 下面是如何正确地执行此操作:
换句话说,扔掉当前的hasher,创建一个只需要密码(最好是salt)作为输入的hasher。您使用与“登录”密码完全相同的代码行对新创建的密码进行哈希运算,然后将登录哈希与存储的哈希进行比较,以查看它们是否匹配。您必须对用户输入的密码进行哈希运算,并将此结果与数据库中的密码进行比较。@PhiterFernandes,如何对用户输入的密码进行哈希处理或从数据库中取消对密码的哈希处理?您应该无法取消对用户密码的哈希处理。您将使用与散列db密码相同的方法对用户输入进行散列。您必须对用户输入的密码进行散列,并将此结果与数据库中的结果进行比较。@PhiterFernandes,如何对用户输入的密码进行散列或从db中取消对密码的散列?您不应该能够取消对用户密码的散列。您将使用与散列db密码相同的方法来散列用户输入。