【发布时间】:2015-02-18 08:46:02
【问题描述】:
我试图用这种方式进行密码复杂性测试,但它不起作用。
private void button1_Click(object sender, EventArgs e)
{
string CapsChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string LowerChars = "abcdefghijklmnopqrstuvwxyz";
string Digits = "0123456789";
string SpecialChars = "#<>!~@";
if (textBox1.Text.ContainsInvariant(CapsChars))
{
if (textBox1.Text.ContainsInvariant(LowerChars))
{
if (textBox1.Text.ContainsInvariant(Digits))
{
if (textBox1.Text.ContainsInvariant(SpecialChars))
{
MessageBox.Show("ALL Ok");
}
else
{
MessageBox.Show("No special character found");
}
}
else
{
MessageBox.Show("No digit found");
}
}
else
{
MessageBox.Show("No lower case character found");
}
}
else
{
MessageBox.Show("No upper case character found");
}
}
public static class StringExt
{
public static bool ContainsInvariant(this string sourceString, string filter)
{
return sourceString.ToLowerInvariant().Contains(filter);
}
}
我喜欢这样测试,密码必须有一个大写字符和一个小写字符,一个数字和一个特殊字符,密码长度必须大于 8。寻找如何实现它的建议。只是想知道我们可以使用 LINQ 实现相同的目标吗?谢谢
【问题讨论】:
-
Regex 对于您正在尝试做的事情恕我直言,这将是一个更好的选择。请参阅此处的 C# 示例,该示例与您要实现的目标相似(但不完全相同),并且可以进行修改以满足您的确切需求:stackoverflow.com/questions/3131025/strong-password-regex
-
@kha 正则表达式仍然依赖于英语。我对 [a-zA-Z] 有点紧张
-
有一些研究表明,像这样的密码复杂性实际上会降低安全性。普遍的智慧建议向用户询问密码短语而不是密码是更好的选择。
标签: c#