建立隨機使用者密碼

為了建立隨機使用者密碼,我們可以使用 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.choicerandom.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