用于验证密码强度的正则表达式

198

我的密码强度标准如下:

  • 长度为8个字符
  • 2个大写字母
  • 1个特殊字符(!@#$&*)
  • 2个数字(0-9)
  • 3个小写字母

请问有人能给我编写相应的正则表达式吗?密码必须满足所有条件。


2
你真的愿意把你的密码安全措施托付给整个互联网吗? - Borealid
20
@Borealid说,公布你的密码策略通常 不会 显著影响你的安全性。如果会有影响的话,那么你的策略就是糟糕的(“只有 passwordhello123 是有效的密码!”)。 - Joachim Sauer
3
@Joachim Sauer: 我的意思不是这样的。我的意思是那位发帖者可能会相信他所收到的任何正则表达式,这并不是一个好主意。 - Borealid
4
实际上,这个正则表达式将会被用在服务代码中,我会测试它来检验不同的情况,而不是盲目相信它 :) - Ajay Kelkar
11
复杂的密码规则通常不会导致更安全的密码,重要的是只要有最小长度即可。人们无法记住大量强密码,而这样的规则可能会干扰良好的密码方案。人们可以变得非常有创意,以规避此类规则,例如使用像“Password-2014”这样的弱密码。通常情况下,你会得到比原来更弱的密码,而不是更强的密码。 - martinstoeckli
显示剩余3条评论
13个回答

0

对于PHP来说,这很好用!

 if(preg_match("/^(?=(?:[^A-Z]*[A-Z]){2})(?=(?:[^0-9]*[0-9]){2}).{8,}$/", 
 'CaSu4Li8')){
    return true;
 }else{
    return fasle;
 }

在这种情况下,结果是真的

感谢 @ridgerunner


为什么不使用 return preg_match("/^(?=(?:[^A-Z]*[A-Z]){2})(?=(?:[^0-9]*[0-9]){2}).{8,}$/", 'CaSu4Li8') - aloisdg

0
另一个解决方案:
import re

passwordRegex = re.compile(r'''(
    ^(?=.*[A-Z].*[A-Z])                # at least two capital letters
    (?=.*[!@#$&*])                     # at least one of these special c-er
    (?=.*[0-9].*[0-9])                 # at least two numeric digits
    (?=.*[a-z].*[a-z].*[a-z])          # at least three lower case letters
    .{8,}                              # at least 8 total digits
    $
    )''', re.VERBOSE)

def userInputPasswordCheck():
    print('Enter a potential password:')
    while True:
        m = input()
        mo = passwordRegex.search(m) 
        if (not mo):
           print('''
Your password should have at least one special charachter,
two digits, two uppercase and three lowercase charachter. Length: 8+ ch-ers.

Enter another password:''')          
        else:
           print('Password is strong')
           return
userInputPasswordCheck()

你如何在最大范围内实现这个功能?比如说两个大写字母,但不能超过两个大写字母?或者两个数字,但不能超过两个数字? - ennth

0

密码必须符合以下4个复杂性规则中的至少3个:

[至少1个大写字母(A-Z) 至少1个小写字母(a-z) 至少1个数字(0-9) 至少1个特殊字符 - 不要忘记将空格视为特殊字符]

至少10个字符

最多128个字符

不允许连续出现2个相同的字符(例如,111不允许)

'^(?!.(.)\1{2}) ((?=.[a-z])(?=.[A-Z])(?=.[0-9])|(?=.[a-z])(?=.[A-Z])(?=.[^a-zA-Z0-9])|(?=.[A-Z])(?=.[0-9])(?=.[^a-zA-Z0-9])|(?=.[a-z])(?=.[0-9])(?=.*[^a-zA-Z0-9])).{10,127}$'

(?!.*(.)\1{2})

(?=.[a-z])(?=.[A-Z])(?=.*[0-9])

(?=.[a-z])(?=.[A-Z])(?=.*[^a-zA-Z0-9])

(?=.[A-Z])(?=.[0-9])(?=.*[^a-zA-Z0-9])

(?=.[a-z])(?=.[0-9])(?=.*[^a-zA-Z0-9])

.{10.127}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接