在密码提示中检查密码

时间:2017-06-12 07:54:35

标签: c# asp.net-mvc passwords password-protection password-recovery

我正在尝试修改一些代码,以防止用户在密码提示中输入密码。我在考虑阻止用户在密码提示中输入密码中的三个连续字符,即使它们被一个字符分开,即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;
}

1 个答案:

答案 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”一种方法可能是

  • 在提示
  • 中查找第一个和第二个密码字符之间的间距
  • 在这些步骤中逐步完成提示,将提示与密码进行比较

进一步的问题包括

  • 间距字符是否重要?例如,你如何处理P-a-s-s!w!o!r!d与P-a-s-s-w-o-r-d相比?
  • 您关心多少个间距字符?例如,P后跟20个字符,然后是assword valid?

这就是说,它可能不值得过于复杂,将提示与密码向前和向后比较可能就足够了。