-1

条件:密码必须至少有 8 个字符,并结合使用以下至少 2 个字符:大小写字母、数字和特殊字符。

哪种模式可以符合条件?

4

2 回答 2

6

正则表达式是完全错误的方法。取而代之的是简单地计算每种字符类型的出现次数,然后简单地使用 if 语句和布尔逻辑来检查您的要求是否得到满足。

但是,请重新考虑您想要做的是否是一个好主意:

  • 限制符号是一个非常糟糕的主意。应该允许任何字符
  • 当密码有一定长度时,要求例如符号/数字/混合大小写失去了很多用途。此外,攻击者无法知道某些用户在其密码中是否仅使用小写字符或仅数字,因此他无法将暴力攻击调整为仅使用这些字符 - 并且由于您希望限制不正确的登录,因此暴力不是无论如何都是不错的选择。
  • 想象一下著名的xkcd中的“正确的马电池主食” 。虽然所有这些单词都在字典中,甚至可能无法通过不正确实施的密码检查,但它非常安全。虽然单个字典单词非常不安全,但其中的多个单词很容易记住和保护(攻击者必须尝试所有例如 4 个单词的组合,即使只有 1000 个单词的字典也是如此)。

因此,更好的密码策略将:

  • 拒绝明显不好的序列。那是像 12345 或 54321 这样的连续数字。qwertz、qwerty 等也很糟糕。
  • 拒绝任何可以在整个字典中找到的密码。确保同时使用英语词典和您网站支持的每种语言的词典。
  • 拒绝任何其他可能不安全的密码。包含用户名(即使向后)?没有。包含用户电子邮件地址@之前的部分?没有。包含他的生日?没有。
  • 至少需要 8 个字符(正如您已经打算做的那样)。

IT Security Stack Exchange 网站上还有一篇有趣的文章,您应该阅读:短复杂密码,还是长字典密码?

于 2013-09-11T15:47:43.833 回答
0
string PASSWORD_PATTERN = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{8,20})";
string password = "Password@1#";
Regex.IsMatch(password,PASSWORD_PATTERN);

尝试这个。

于 2013-09-11T15:43:22.380 回答