【发布时间】:2017-11-13 14:50:34
【问题描述】:
我正在尝试纠正一些代码以防止用户在密码提示中输入他们的密码。我正在考虑防止用户在密码提示中包含三个连续的密码字符,即使它们被一个字符分隔,即 p-a-s-s-w-o-r-d。
我编写了下面的代码,但这可以防止密码提示,例如:密码:p123a21312swert1,这太严格了。这是因为我从密码提示中删除了所有不在密码中的字符。我四处搜索,但找不到任何相关内容。
var strippedPwdHint = new string(sValue.Where(c => sCompareTo.ToCharArray().Contains(c)).ToArray());
for (var i = 0; i < (strippedPwdHint.Length - 2); i++)
{
if (!sCompareTo.Contains(strippedPwdHint.Substring(i, 3))) continue;
retVal = new ValidationResult(ErrorMessage);
break;
}
【问题讨论】:
-
提示:提示包含密码中的所有字符,并且它们的顺序相同(或相反的顺序)。但我不会走得太远,规则往往只是让用户烦恼......
-
是的,但我想所以我也打算防止被一个字符分隔,例如 p-a-s-s-w-o-r-d。
-
我的意思是检查密码中的所有字符是否也在提示中以相同的顺序出现,无论中间有多少“分隔符”:p111a222s333s444w555o666r777d。有点极端的情况,但我想你明白我的意思。对于一个像样的密码(足够长和/或足够复杂),在提示中写入相同字符的机会应该非常接近于零。另一个注意事项:您说的是 characters 但您要检查的是 code units (字符串是 Unicode UTF-16 编码文本),它不一样。
-
所以你是烦人的密码规则和密码提示规则背后的人!
-
谢谢@AdrianoRepetti,非常有用的信息。 Alexandru,哈哈,我希望人们不要在提示中输入密码。
标签: c# asp.net-mvc passwords password-protection password-recovery