在python中生成密码
我想在python中生成一些字母数字密码。 一些可能的方法是:
import string
from random import sample, choice
chars = string.letters + string.digits
length = 8
''.join(sample(chars,length)) # way 1
''.join([choice(chars) for i in range(length)]) # way 2
但我不喜欢这两者,因为:
方法1仅选择唯一字符,并且您不能生成长度> len(字符)的密码
方式2我们有''.join(choice(chars) for _ in xrange(length))变量未使用,我找不到很好的方法来避免这种情况
那么,还有其他好的选择吗?
附言 因此,我们在这里进行了''.join(choice(chars) for _ in xrange(length))的100000次迭代测试:
''.join(sample(chars,length)) # way 1; 2.5 seconds
''.join([choice(chars) for i in range(length)]) # way 2; 1.8 seconds (optimizer helps?)
''.join(choice(chars) for _ in range(length)) # way 3; 1.8 seconds
''.join(choice(chars) for _ in xrange(length)) # way 4; 1.73 seconds
''.join(map(lambda x: random.choice(chars), range(length))) # way 5; 2.27 seconds
因此,获胜者是''.join(choice(chars) for _ in xrange(length))。
7个解决方案
89 votes
从Python 3.6开始
您应该使用secrets模块来生成密码安全的密码,该密码可从Python 3.6开始使用。 改编自文档:
import secrets
import string
alphabet = string.ascii_letters + string.digits
password = ''.join(secrets.choice(alphabet) for i in range(20