gpt4 book ai didi

asp.net - 试图阻止用户使用旧密码作为新密码

转载 作者:行者123 更新时间:2023-12-04 17:56:24 25 4
gpt4 key购买 nike

我试图阻止用户使用他们最后 5 个密码中的任何一个。我使用的是 Visual Studio 2015 中的模板,它为您提供了一个基本的身份用户系统。

我已将以下列分别添加到我的用户数据库 passwordLastChanged(Date) 和名为 previousPassword1(至 5)的 5 列。

我需要使用类似 User.Identity.GetUserPassword 的方式从数据库中检索当前用户密码,我还需要类似 model.NewPassword.Encrypt< 的方式(那些不存在!)。是否有方法执行我在 api 中没有看到的这些操作?

而且我还必须加密我的新数据以查看它是否匹配,我如何才能像加密我的用户密码一样加密字符串?

//
// POST: /Manage/ChangePassword
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ChangePassword(ChangePasswordViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
var result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword);
if (result.Succeeded)
{
var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
if (user != null)
{
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
}
return RedirectToAction("Index", new { Message = ManageMessageId.ChangePasswordSuccess });
}
AddErrors(result);
return View(model);
}

最佳答案

好的,我会把我的评论变成某种答案。因此,如前所述,密码存储在表 Hashed 中。未加密。所以根据定义,它们不能被检索 ( easily )。

尽管可以保留以前密码的记录,但没有什么可以阻止您将散列密码放入表中。然后,当用户输入密码时,您对其进行哈希处理并检查它是否已被使用,这与未进行哈希处理完全相同,但使用的是哈希而不是原始密码(这也使一切都很好和安全)。

I wonder If I can just call a function or if I will have to implement the actual hashing algorithm that uses the same salt and what not?

UserManager implements a PasswordHasher .因此,要获得以与默认哈希相同的方式哈希的密码应该很简单:

PasswordVerificationResult passwordMatch = UserManager.PasswordHasher.VerifyHashedPassword(previousPassword1, rawPassword);

我不使用此身份验证方法,因此以上内容未经测试且仅基于 MSDN 文档。应该没问题,但如果它不起作用请告诉我。

如果密码匹配,则 passwordMatch == PasswordVerificationResult.Success。您可能还需要允许 PasswordVerificationResult.SuccessRehashNeeded

关于asp.net - 试图阻止用户使用旧密码作为新密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40218577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com