re.search密码检查错误

时间:2014-11-09 00:51:25

标签: python regex passwords character

我的代码正常运行,但是定义强密码的第一行代码会导致其余代码返回任何内容。例如,由于第一行代码是搜索一个数字的字符,因此从那里开始的任何代码都会导致代码在满足要求的情况下不打印消息。如果我将其从搜索数字改为搜索大写或小写字符,那么如果代码需要查找大写或小写等,则之后的任何编码都将无法运行。

import re
password = str(input("Please enter the password you wish to test the strength of.\n"))
if re.search(r'[0-9]', password): 
    if re.search(r'[A-Z]', password):
        if re.search(r'[a-z]', password):
            print("Your password strength is STRONG.")
elif re.search(r'[a-z]', password) and re.search(r'[A-Z]', password):
    print("Your password strength is MEDIUM.")
elif re.search(r'[0-9]', password) and re.search(r'[A-Z]', password):
    print("Your password strength is MEDIUM.")
elif re.search(r'[a-z]', password) and re.search(r'[0-9]', password):
    print("Your password strength is MEDIUM.")
elif re.search(r'[A-Z]', password) or re.search(r'[a-z]', password) or re.search(r'[0-9]', password):
    print("Your password strength is WEAK.")

3 个答案:

答案 0 :(得分:1)

使用密码“9gag”自己遵循代码的逻辑。那里有一个[0-9],但不是一个[A-Z]。解释器输入第一个if,因此从后续的elif中排除,但它不会进入嵌套的if并陷入困境。

这种方法可能更容易:

hits = [ re.search(r'[0-9]', password) != None, re.search(r'[A-Z]', password) != None, re.search(r'[a-z]', password) != None ]
strength = sum( hits )

答案 1 :(得分:0)

你可以将它重构为像这样的东西

import re
strength = 0
password = str(input("Please enter the password you wish to test the strength of.\n"))
if re.search(r'[0-9]', password):
    strength += 1
if re.search(r'[A-Z]', password):
    strength += 1
if re.search(r'[a-z]', password):
    strength += 1

if strength == 3
    print("Your password strength is STRONG.")

if strength == 2:
    print("Your password strength is MEDIUM.")

if strength == 1:
    print("Your password strength is WEAK.")

虽然,我确信有更好的方法,尝试开箱即用:D

答案 2 :(得分:0)

我曾尝试实现更高级的密码强度算法(涉及shannon熵及其修改),但最后我发现这是一个难题,人们无法真正说出密码很好。

你唯一可以轻易确定的是密码真的很糟糕。

所以也许只是教育用户明智地选择密码,或者只是在适当的时候创建随机密码是最好的。

对密码设置任意规则通常很烦人。例如。如果有人使用密码管理器生成随机密码,他们可能会失败你的规则,但仍然是好密码,因为它们是随机的。