20190110-生成密碼以及簡易密碼強度檢查

何發奮發表於2019-01-10

1.生成9位字母的密碼

使用random.choice函式,此函式需要一個序列,因此給定一個序列包含a-z,A-Z

#step1:生成序列
import random
s1=``
for i in range(97,123):
    s1+=chr(i)+chr(i-32)  
#step2: 生成密碼
password=``
for i in range(9):
    password+=random.choice(s1)#從s1序列中隨機選取一個元素
print(`9位數的密碼為:`,password)

2:生成9位數字和字母的密碼,密碼可能隨機出現數字和字母
此題在上一題的基礎上先生成一個序列包含所有字母和數字,然後使用random.choice()函式

import random
s1=``
for i in range(97,123):
    s1+=chr(i)+chr(i-32)
s1+=`0123456789`
print(s1)
#生成包含小寫字母和數字的序列
#另外一個寫法
import string
s1 = string.ascii_letters+string.digits
password=``
for i in range(9):
    password+=random.choice(s1)
print(`隨機密碼為:`,password)

3.檢測密碼強度

c1 : 長度>=8
c2: 包含數字和字母
c3: 其他可見的特殊字元
強密碼條件:滿足c1,c2,c3
中密碼條件: 只滿足任一2個條件
弱密碼條件:只滿足任一1個或0個條件

思路:先將c1,c2,c3三個條件寫成函式,以Ture和False返回,True為滿足,False為不滿足

step1.寫出3個條件函式

def check_len(password):
    if len(password)>=8:
        return True
#長度大於8則為True
    else:
        return False
def check_letter_type(password):
    import string
    result =False
    for i in string.ascii_letters:
#大小寫字母
        if i in password:
#密碼中包含字母
            for j in string.digits:
#數字
                if j in password:
#密碼中包含數字
                    result =True
    return result
def check_punctuation(password):
    import string
    result = False
    for i in string.punctuation:
        if i in password:
#密碼中包含特殊字元
            result =True
    return result

check_len檢查密碼長度,check_letter_type檢查密碼中是否包含字母和數字,check_punctuation檢查密碼中是否包含特殊字元

step2:檢查密碼滿足幾個條件

def pass_verify(password):
    count = 0 
#使用count來記錄password滿足幾個條件
    if check_len(password):
        count +=1
    if check_letter_type(password):
        count +=1
    if check_punctuation(password):
        count +=1
    if count==3:
        print("強密碼")
    elif count ==2:
        print(`中密碼`)
    else:
        print(`弱密碼`)
pass_verify(password)

 

相關文章