如何用正则表达式进行密码验证?

时间:2013-09-11 15:39:27

标签: c# regex passwords

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

哪种模式适合条件?

2 个答案:

答案 0 :(得分:6)

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

然而,重新考虑一下你想做什么是个好主意:

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

所以更好的密码策略会:

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

在IT安全堆栈交换网站上还有一篇有趣的帖子,你应该阅读:Short complex password, or long dictionary passphrase?

答案 1 :(得分:0)

string PASSWORD_PATTERN = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{8,20})";
string password = "Password@1#";
Regex.IsMatch(password,PASSWORD_PATTERN);

试试这个。