一、實(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