创建随机用户密码

为了创建随机用户密码,我们可以使用 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