Python隨機(jī)生成帶特殊字符的密碼
在日常運(yùn)維中,如果涉及到用戶(hù)管理,就一定會(huì)用到給用戶(hù)設(shè)置密碼的工作,其實(shí)吧,平時(shí)腦子里覺(jué)得設(shè)置個(gè)密碼沒(méi)什么,但要真讓你隨手敲一個(gè)12位帶特殊字符的隨機(jī)密碼,也是很痛苦的事,如果讓你敲10個(gè)這樣的隨機(jī)密碼,我估計(jì)要人要瘋了,所以這事不適合人干,但機(jī)器最做這個(gè)最拿手,今天我們就來(lái)學(xué)習(xí)一段python腳本,可以直接生成自己需要的密碼,且密碼長(zhǎng)度,數(shù)字,字符個(gè)數(shù)隨意你指定,廢話(huà)不多說(shuō)了,我們直接看代碼:
#!/usr/bin/env python import string from itertools import chain from random import choice, sample def mkpasswd(length=12, digits=4, upper=3, lower=3): lowercase = string.lowercase uppercase = string.uppercase salt = '!@#$%^&*()><?' password = list( chain( (choice(uppercase) for _ in range(upper)), (choice(lowercase) for _ in range(lower)), (choice(string.digits) for _ in range(digits)), (choice(salt) for _ in range((length - digits - upper - lower))) ) ) return "".join(sample(password, len(password))) if __name__ == '__main__': print mkpasswd() #!/usr/bin/env python import string from itertools import chain from random import choice, sample def mkpasswd(length=12, digits=4, upper=3, lower=3): lowercase = string.lowercase uppercase = string.uppercase salt = '!@#$%^&*()><?' password = list( chain( (choice(uppercase) for _ in range(upper)), (choice(lowercase) for _ in range(lower)), (choice(string.digits) for _ in range(digits)), (choice(salt) for _ in range((length - digits - upper - lower))) ) ) return "".join(sample(password, len(password))) if __name__ == '__main__': print mkpasswd()
腳本逐行解釋?zhuān)铋_(kāi)始幾行導(dǎo)入了需要的模塊,接下來(lái)定義一個(gè)mkpasswd的函數(shù),函數(shù)的參數(shù)可以設(shè)置密碼長(zhǎng)度,數(shù)字、大寫(xiě)和小寫(xiě)字符的個(gè)數(shù),接下來(lái)是函數(shù)主題部分:
利用string模塊的屬性生成大小寫(xiě)字符串,salt是特殊字符集(支持自己添加),我們重點(diǎn)說(shuō)password的生成,它首先是一個(gè)列表,因?yàn)檎{(diào)用了list()工廠函數(shù),chain()函數(shù)的功能是將一組迭代器對(duì)象連接起來(lái),chain()里有三個(gè)生成器表達(dá)式,每個(gè)表達(dá)式調(diào)用for循環(huán),然后隨機(jī)選擇指定個(gè)數(shù)的字符,可能大家有看到for循環(huán)中有一個(gè)_(下劃線(xiàn)),這個(gè)下劃線(xiàn)有什么作用呢?我就不賣(mài)關(guān)子了,其實(shí)它啥作用也沒(méi)有,我自己理解為用不到的變量,這種寫(xiě)法大家以后也可以用,比如你在循環(huán)的時(shí)候用不到這個(gè)變量,就可用用_(下劃線(xiàn))來(lái)表示。
函數(shù)最后是return連接后的字符串,sample()函數(shù)是從隨機(jī)樣本中取出自己指定的樣本個(gè)數(shù),需要兩個(gè)參數(shù),一個(gè)是樣本,一個(gè)是取多少,取的過(guò)程是隨機(jī)的,其實(shí)在這個(gè)腳本中這個(gè)函數(shù)沒(méi)有發(fā)揮它完全的功能,因?yàn)樯傻膒assword就是12位的,然后在取出12位,不存在從大樣本中取出小樣本的工作,但起到了隨機(jī)的功能,所以生成的密碼是字符都是隨機(jī)的。
關(guān)于Python隨機(jī)生成帶特殊字符的密碼就給大家介紹到這里,希望對(duì)大家有所幫助!
相關(guān)文章
Python利用ROI進(jìn)行圖像合成的問(wèn)題小結(jié)
圖像的 ROI (region of interest) 是指圖像中感興趣區(qū)域、在 OpenCV 中圖像設(shè)置圖像 ROI 區(qū)域,實(shí)現(xiàn)只對(duì) ROI 區(qū)域操作,本文給大家介紹Python利用ROI進(jìn)行圖像合成的問(wèn)題小結(jié),感興趣的朋友一起看看吧2021-07-07
30秒輕松實(shí)現(xiàn)TensorFlow物體檢測(cè)
這篇文章主要為大家詳細(xì)介紹了30秒輕松實(shí)現(xiàn)TensorFlow物體檢測(cè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
VScode查看python f.write()的文件亂碼問(wèn)題及解決方法
這篇文章主要介紹了VScode查看python f.write()的文件亂碼問(wèn)題及解決方法,本文通過(guò)圖文并茂的形式給大家分享解決方法,需要的朋友可以參考下2023-02-02
詳解Python中高階函數(shù)(map,filter,reduce,sorted)的使用
高階函數(shù)就是能夠把函數(shù)當(dāng)成參數(shù)傳遞的函數(shù)就是高階函數(shù),換句話(huà)說(shuō)如果一個(gè)函數(shù)的參數(shù)是函數(shù),那么這個(gè)函數(shù)就是一個(gè)高階函數(shù)。本文為大家詳細(xì)講解了Python中常用的四個(gè)高階函數(shù),感興趣的可以了解一下2022-04-04
Python 中最長(zhǎng)公共子序列的長(zhǎng)度
子序列是在不改變剩余字符的順序的情況下,在刪除一些字符或不刪除任何字符后從給定序列獲得的序列,這篇文章主要介紹了Python 中的最長(zhǎng)公共子序列,需要的朋友可以參考下2023-06-06
Python趣味挑戰(zhàn)之實(shí)現(xiàn)簡(jiǎn)易版音樂(lè)播放器
小伙伴們天天學(xué)編程應(yīng)該都學(xué)累了,今天特地給大家整理了這篇文章,讓大家在學(xué)習(xí)的時(shí)候也收貨快樂(lè),文中有非常詳細(xì)的代碼示例,需要的朋友可以參考下2021-05-05

