Python實(shí)踐--生成隨機(jī)密碼

一、實(shí)驗(yàn)?zāi)康?/h3>

利用Python中的random庫(kù)來(lái)編寫(xiě)一個(gè)密碼生成器,通過(guò)程序來(lái)隨機(jī)生成密碼,從而增強(qiáng)保密性。
在編寫(xiě)該程序之前,我們需要先確定我們的密碼有什么要求?
①密碼數(shù)不小于6位
②密碼中可以包含字母、數(shù)字、符號(hào)
③必須含有至少一個(gè)大寫(xiě)字母
④必須含有至少一個(gè)特殊符號(hào)

二、實(shí)驗(yàn)代碼

按照上面的要求,我們可以將代碼分為幾部分,分別是大寫(xiě)字母的隨機(jī)生成、特殊符號(hào)的隨機(jī)生成、小寫(xiě)字母或數(shù)字的隨機(jī)生成,最后將這幾部分的密碼整合后隨機(jī)打亂輸出。

1、大寫(xiě)字母的隨機(jī)生成
#生成隨機(jī)的大寫(xiě)字母
def get_upper():
    count=random.randint(1,3)   #在【1,3】之間取一個(gè)隨機(jī)整數(shù)
    return random.choices('ABCDEFGHIJKLMNOPQRSTUVWXYZ',k=count)   #從26個(gè)大寫(xiě)字母中隨機(jī)選擇k個(gè)
2、特殊符號(hào)的隨機(jī)生成
#隨機(jī)選取特殊符號(hào)
def get_char():
    count=random.randint(1,3)
    return random.choices('!#*.',k=count)
3、選擇隨機(jī)的小寫(xiě)字母和數(shù)字
#選擇小寫(xiě)字母或數(shù)字
def get_lower(count):
    a = 'abcdefghijklmnopqrstuvwxyz0123456789'
    return random.choices(a,k=count)

這里由于我們對(duì)密碼中小寫(xiě)字母或數(shù)字并沒(méi)有具體要求,所以其長(zhǎng)度是由我們所設(shè)置的密碼長(zhǎng)度減去上面隨機(jī)生成大寫(xiě)字母和特殊符號(hào)后的長(zhǎng)度,因此該函數(shù)需要傳入其長(zhǎng)度要求,而不是隨機(jī)生成。

4、將密碼整合
#生成密碼
def get_password(length):
    #規(guī)定密碼不能小于6位
    if length<6:
        length=6
    
    list=[]
    list_upper=get_upper()
    special_char=get_char()
    #extend() 函數(shù)用于在列表末尾一次性追加另一個(gè)序列中的多個(gè)值(用新列表擴(kuò)展原來(lái)的列表)。
    list.extend(list_upper)
    list.extend(special_char)
    
    lower_length=length-len(list)
    list_lower=get_lower(lower_length)
    list.extend(list_lower)
    #shuffle函數(shù)用于打亂密碼順序
    random.shuffle(list)
    #join() 方法用于將序列中的元素(必須是str) 以指定的字符 連接生成一個(gè)新的字符串。
    return ''.join(list)

三、完整代碼及運(yùn)行結(jié)果

這就是生成隨機(jī)密碼的四個(gè)部分,最后可以寫(xiě)一個(gè)主函數(shù)來(lái)調(diào)用這些方法,從而輸出隨機(jī)密碼,完整代碼如下:

import random

#生成隨機(jī)的大寫(xiě)字母
def get_upper():
    count=random.randint(1,3)   #在【1,3】之間取一個(gè)隨機(jī)整數(shù)
    return random.choices('ABCDEFGHIJKLMNOPQRSTUVWXYZ',k=count)   #從26個(gè)大寫(xiě)字母中隨機(jī)選擇k個(gè)

#隨機(jī)選取特殊符號(hào)
def get_char():
    count=random.randint(1,3)
    return random.choices('!#*.',k=count)

#選擇小寫(xiě)字母或數(shù)字
def get_lower(count):
    a = 'abcdefghijklmnopqrstuvwxyz0123456789'
    return random.choices(a,k=count)

#生成密碼
def get_password(length):
    #規(guī)定密碼不能小于6位
    if length<6:
        length=6
    
    list=[]
    list_upper=get_upper()
    special_char=get_char()
    #extend() 函數(shù)用于在列表末尾一次性追加另一個(gè)序列中的多個(gè)值(用新列表擴(kuò)展原來(lái)的列表)。
    list.extend(list_upper)
    list.extend(special_char)
    
    lower_length=length-len(list)
    list_lower=get_lower(lower_length)
    list.extend(list_lower)
    #shuffle函數(shù)用于打亂密碼順序
    random.shuffle(list)
    #join() 方法用于將序列中的元素(必須是str) 以指定的字符 連接生成一個(gè)新的字符串。
    return ''.join(list)

if __name__ == '__main__':
    print(get_password(4))
    print(get_password(8))
    print(get_password(12))
運(yùn)行結(jié)果.png

參考:http://www.coolpython.net/python_senior/miny_pro/generate_password.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容