我正在尝试修改一些代码,以防止用户在密码提示中输入密码。我在考虑阻止用户在密码提示中输入密码中的三个连续字符,即使它们被一个字符分开,即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;
}
答案 0 :(得分:1)
在这种情况下,通常情况是“我能走多远?”因为你不可能涵盖所有案件。除此之外,显而易见且应该防止一个人的事情可能是如此模糊,这对其他人来说无关紧要。
虽然检查提示与前向或后向密码不匹配很简单,但要做更多事情的明显事情很快就会变得复杂。
假设你有
string password = [Password]
string hint = [Password Hint]
只需比较密码和提示就会标记匹配的情况
bool invalid = password.Compare(hint);
要抓住相反的情况,你可以做类似的事情
string reversed = new string(hint.ToCharArray().Reverse().ToArray());
bool invalid = password.Compare(reversed);
如果,如你所说,你有这样的东西
string hint = "P-a-s-s-w-o-r-d";
你知道间距字符然后你可以替换它然后比较
bool invalid = password.Compare(hint.Replace("-",""));
但是,如果您不确定间距字符是什么,那就更复杂了,您必须小心,不要将法律方案标记为无效。
假设您只想排除提示是密码+常规间距的情况,例如: “P-a-s-s-w-o-r-d”一种方法可能是
进一步的问题包括
这就是说,它可能不值得过于复杂,将提示与密码向前和向后比较可能就足够了。