簡體   English   中英

如何編寫 python function 來檢查用戶輸入的密碼是否不強?

[英]How to write a python function to check if a user input for a password is not strong?

我需要為賦值編寫一個代碼,該代碼將接受用戶輸入密碼(作為字符串)並讓用戶知道輸入的哪些元素使密碼變弱。

要求密碼長度至少為 8 個字符,包含大小寫字母,並包含數字。 我的代碼不需要確定密碼是否強,只要弱就為什么弱。

到目前為止,我編寫的代碼如下:

    size = len(password)
    
    if size < 8:
        print('not long enough')
    
    if password.isalnum():
        pass
    else:

    for x in password:
        if x.isupper():
            pass
        else:
            print('no upper case')
    
    for y in password:
        if y.islower():
            pass
        else:
            print('no lower case')
            
    return

在我的測試運行返回多行“無大寫”和“無小寫”后,我做了一些更改並使用了 .isalnum 運算符。

如果有人能把我推向正確的方向,我將不勝感激,因為這讓我有點困惑

沒有正則表達式,您可以使用anystr.isnumeric

if not any(map(str.isnumeric, password):
    print('No numbers')

我寧願 go 與正則表達式。

In [122]: def validate(password):
     ...:     return True if re.match("(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}", password) else False
     ...:

In [123]: validate("helloas")
Out[123]: False

In [124]: validate("helH12asfgvGh")
Out[124]: True

(其他答案已經給了你很好的答案,所以這不是一個完整的答案,它只是對出了什么問題的解釋。)導致問題的代碼區域是

for x in password:
        if x.isupper():
            pass
        else:
            print('no upper case')
for y in password:
        if y.islower():
            pass
        else:
            print('no lower case')

您正在遍歷整個密碼,檢查每個字符是否為大寫,如果不是,則打印出“無大寫”。 問題是如果單詞的單個字符不是大寫,“that_character_that_isn't_uppercase”.isupper() 將返回 false,並打印錯誤語句。 例如,密碼 PaSSWORD 將返回一個“非大寫”,因為“a”.isupper() 為 False。 密碼密碼將返回 7 個“非大寫”,因為字符 p、a、s、s、w、o、r 都是小寫的。 x.islower() 測試也發生了同樣的事情,您會看到每個單獨的字符是否都是小寫的。 我會實現這樣的事情:

#password.islower() will return true if all the entire string is lowercase(and thus not uppercase)
if password.islower():
    print("No upper case")
elif password.isupper():
    print("No lower case")
#Again, password.isupper() sees if all letters are uppercase(which means that there is no lowercase letters).

希望這有幫助!

網上有很多 python 密碼檢查器,例如: https://www.geeksforgeeks.org/password-validation-in-python/

這是一個快速控制台程序,您可以這樣調用:

$ python3 password_checker.py "Testf7788790##$"
Testing password:  Testf7788790##$
Password is valid:  True
$ python3 password_checker.py "insecurePassword"
Testing password:  insecurePassword
Password should contain at least one number
Password is valid:  False

password_checker.py的內容:

#!/usr/bin/python

import sys

def password_check(passwd):
    symbols = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '+', '=']
    isValid = False
      
    if len(passwd) < 10:
        print('Password should be at least 10 characters')
    elif not any(char.isdigit() for char in passwd):
        print('Password should contain at least one number')
    elif not any(char.isupper() for char in passwd):
        print('Password should contain at least one uppercase character')
    elif not any(char.islower() for char in passwd):
        print('Password should contain at least one lowercase character')
    elif not any(char in symbols for char in passwd):
        print('Password should contain at least one special character from list: ', symbols)
    else:
      isValid = True

    return isValid

arguments = sys.argv
if len(arguments) < 2:
    print('No password could be parsed by argv')
    valid_password = False
else:
    password = arguments[1]
    print('Testing password: ', password)
    valid_password = password_check(password)

print('Password is valid: ', valid_password)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM