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