建立隨機使用者密碼
為了建立隨機使用者密碼,我們可以使用 string
模組中提供的符號。具體為 punctuation
為標點符號,ascii_letters
為字母,digits
為數字:
from string import punctuation, ascii_letters, digits
然後我們可以在名為 symbols
的名稱中組合所有這些符號:
symbols = ascii_letters + digits + punctuation
刪除其中任何一個以建立具有較少元素的符號池。
在此之後,我們可以使用 random.SystemRandom
生成密碼。對於 10 長度的密碼:
secure_random = random.SystemRandom()
password = "".join(secure_random.choice(symbols) for i in range(10))
print(password) # '^@g;J?]M6e'
請注意,random
模組立即可用的其他例程 - 例如 random.choice
,random.randint
等 - 不適用於加密目的。
在窗簾後面,這些例程使用 Mersenne Twister PRNG ,它不滿足 CSPRNG 的要求。因此,特別是,你不應使用它們中的任何一個來生成你計劃使用的密碼。始終使用 SystemRandom
的例項,如上所示。
Python 3.x >= 3.6
從 Python 3.6 開始,secrets
模組可用,它提供了加密安全功能。
引用官方文件 ,生成 *“包含至少一個小寫字元,至少一個大寫字元,至少三個數字的十個字元的字母數字密碼”,*你可以:
import string
alphabet = string.ascii_letters + string.digits
while True:
password = ''.join(choice(alphabet) for i in range(10))
if (any(c.islower() for c in password)
and any(c.isupper() for c in password)
and sum(c.isdigit() for c in password) >= 3):
break