2017-10-17 40 views
1

我正在重写我们的密码验证规则以满足asp.net c#web窗体应用程序的一组非常严格的要求。ASP.NET密码验证包含2组字符

我使用大多数这样的正则表达式(如最小字符,允许的字符等)。

我找不到解决方案的一个要求如下: 必须包含4个允许字符类中的2个字符。

在这种情况下,允许的类是大写,小写,数字和特殊(US ASCII)。

如果任何人都可以帮助如何写这将是值得赞赏的。 感谢

+1

为什么这么弱的密码?这不是一个非常严格的要求,它实际上被认为是非常薄弱的​​。人们应该被允许使用*大的密码,而不需要人为的限制,迫使他们使用短而弱的密码。为什么只有ASCII字符?为什么不让我输入'Τίσενοιάζειεσένατίσκέφτονταιοιάλλοι?' –

+6

事实上,要求比弱。他们*违反了美国NIST,英国NCSC和微软自己的[密码指南](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/06/Microsoft_Password_Guidance-1)的指导。 PDF)。如果您遭到违反,您将双重承担故意执行弱密码的责任。查看[Troy Hunt的文章](https://www.troyhunt.com/passwords-evolved-authentication-guidance-for-the-modern-era/)关于当前的指导。 –

+0

我不认为有可能在一个正则表达式中匹配所有内容。但最简单的方法是使用[contains](https://msdn.microsoft.com/en-us/library/dy85x1sa(v = vs.110).aspx)方法来检查每个限制。但是,看看文章@PanagiotisKanavos之前做任何事情,你可能会后悔...... –

回答

1

所有表达合理的关切提意见,但我只是想分享这个方法符合“4种元素的至少2”:

(?:.*?(?:a(?!.*a)|b(?!.*b)|c(?!.*c)|d(?!.*d))){2} 

字母“A”到“d”可以用适当的字符类替换这个问题,但是它也可以扩展为更一般地匹配“至少X个Y不重叠的子表达式”。