0

抱歉,我正在尝试在 python 3.2 上编写代码以检查密码强度,但看起来我一直在某个地方出错。每当我的输入是#$%$J 时,如果 input.upper() 为真,就会进入。我该如何防止这种情况发生?而且我的分值不准确。编码:

password_user = input("Input password : ")
score = 0
if len(password_user) <=5:
    print("Password is too short! ")
    score = 1
elif password_user == password_user.lower():
    print("Bad Password")
    score = 1
elif password_user == password_user.upper():
    print("Bad Password")
    score = 1
else:
    while score == 0:
        for x in range(33,48):
            ascii_str = chr(x)
            if password_user.find(ascii_str) >= 0:
                score = score + 3
        for y in range(97,123):
            ascii_lower = chr(y)
            if password_user.find(ascii_lower) >= 0:
                score = score + 1
        for w in range(65,91):
            ascii_upper = chr(w)
            if password_user.find(ascii_upper) >= 0:
                score = score + 2
        for z in range(48,58):
            ascii_num = chr(z)
            if password_user.find(ascii_num) >= 0:
                score = score + 2
if score >0 | score <=5:
    print("Weak Password")
    print(score)
elif score > 5 | score < 7:
    print("Medium Password")
    print(score)
elif score >= 7:
    print("Strong Password")
    print(score)
4

1 回答 1

1

首先,它应该是,例如,find(ascii_str) > -1 (以便计算字符数 0)。我假设您的意思是为每个字符范围最多提供一次分数奖励。因此,这样的事情是合适的:

contain = false
for x in range(33,48):
    ascii_str = chr(x)
    if password_user.find(ascii_str) > -1:
        contain = true
if contain:
    score += 3

对于其他人也是如此。

编辑:这个问题并不清楚您是否希望每个不同的字符增加分数,每个字符增加分数,或者只针对每种类型的字符增加分数。鉴于您对任何大于 6 的分数的衡量标准都很强,任何不返回“密码太短”或“密码错误”的东西都会很强大(至少 6 个字符,至少有一个大写字母,已经给 7 分)除非你有很多重复的字母。如果您真的希望每个新字符都增加分数,则应该更改指标(可能 12 或更多是强密码?),尽管在我看来,只增加包含的每种字符类型的分数更有意义,并且然后将分数增加长度,或类似的东西。

于 2013-10-08T12:51:51.367 回答