gpt4 book ai didi

c# - 阻止用户使用最后 5 个密码?

转载 作者:太空狗 更新时间:2023-10-29 18:20:22 25 4
gpt4 key购买 nike

我需要强制用户在 90 天后更改密码。这适用于以下内容:

if (memberUser.LastPasswordChangedDate.Date.AddDays(90) < DateTime.Now.Date)
{
return RedirectToAction("MyChangePasswordMethod", "MyController");
}

然而,我的另一个要求是用户使用的最后 5 个密码不能重复 - asp.net 是否内置了类似的东西?我在存储上次密码的 aspnet 数据库表中看不到任何内容。是否需要将最后一个密码值存储在我自己的数据库表中,然后将输入的新密码字段与我自己的自定义数据库表中的用户值进行比较?

最佳答案

如您所见,没有内置任何内容,因此您必须为用户存储以前的密码 - 确保它们经过哈希处理或加密,并检查该列表以确保它们不会重复使用密码。确保您使用相同的盐进行哈希/加密,否则您将永远无法匹配相同的密码。

我会存储他们以前的所有密码。这意味着当旧数据发生 5 次更改时,您不必从表中清除旧数据,如果要求更改为不重用最后 10 或 15 次更改,您将拥有数据。如果您还存储了更改密码的日期,您可以建立一个支票,说明在过去 12 个月内没有重复使用。

当您存储散列/加密密码并进行检查时,没有机会从您的系统中获取纯文本版本。

我有一个包含“UserId”、“Password”和“DateChanged”的表。然后您可以找到该用户的最后 N 个密码,并将新密码的散列/加密版本与此列表进行比较:

var encryptedPassword = MembershipProvider.EncryptPassword(password);
int numberOfReuse = 5; // or configurable
var historiesQuery = (from histories in dataContext.GetTable<PasswordHistory>()
where histories.UserId == userId
orderby histories.PasswordDate descending
select histories.Password).Take<string>(numberOfReuse);

return historiesQuery.Contains<string>(enycryptedPassword);

如果密码已被使用,则返回 true。

做基于日期的检查:

var encryptedPassword = MembershipProvider.EncryptPassword(password);
DateTime testDate = DateTime.Now.AddMonths(-12); // configurable
var historiesQuery = (from histories in dataContext.GetTable<PasswordHistory>()
where histories.UserId == userId
and histories.PasswordDate >= testDate
orderby histories.PasswordDate descending
select histories.Password);

return historiesQuery.Contains<string>(enycryptedPassword);

关于c# - 阻止用户使用最后 5 个密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15065429/

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