在密码提示中检查密码
Checking for Password within a password hint
我正在尝试纠正一些代码以防止用户在密码提示中输入他们的密码。我正在考虑防止用户在密码提示中使用密码中的三个连续字符,即使它们被一个字符分隔,即 p-a-s-s-w-o-r-d。
我写了下面的代码,但这可以防止密码提示,例如: password: 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;
}
在这种情况下,通常是 "how far do I go?" 的情况,因为您不可能涵盖所有情况。最重要的是,对一个人来说显而易见且应该避免的事情可能是如此晦涩难懂,以至于对其他人来说无关紧要。
虽然向前或向后检查提示与密码不匹配很简单,但显然要做更多事情很快就会变得复杂。
假设你有
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 是否有效?
话虽这么说,可能不值得变得太复杂,前后比较提示与密码可能就足够了。
我正在尝试纠正一些代码以防止用户在密码提示中输入他们的密码。我正在考虑防止用户在密码提示中使用密码中的三个连续字符,即使它们被一个字符分隔,即 p-a-s-s-w-o-r-d。
我写了下面的代码,但这可以防止密码提示,例如: password: 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;
}
在这种情况下,通常是 "how far do I go?" 的情况,因为您不可能涵盖所有情况。最重要的是,对一个人来说显而易见且应该避免的事情可能是如此晦涩难懂,以至于对其他人来说无关紧要。
虽然向前或向后检查提示与密码不匹配很简单,但显然要做更多事情很快就会变得复杂。
假设你有
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 是否有效?
话虽这么说,可能不值得变得太复杂,前后比较提示与密码可能就足够了。