在Python中,我想写一个密码生成器。
您认为我应该在程序中添加哪些内容来帮助您创建一个好的,强密码?
一句话答案就足够了。我只是想开始一个思考过程。
答案 0 :(得分:5)
本着xkcd漫画的精神......
>>> import random
>>> def password_gen():
... with open('/usr/share/dict/words') as f:
... words = [w.strip().lower() for w in f if w.strip().isalpha()]
... while True:
... yield ' '.join(random.sample(words, 4))
...
>>> g = password_gen()
>>> next(g)
'mansion yodelling sumner coordination'
>>> next(g)
'proving velvetiest upload muggers'
>>> next(g)
'southey unfortunately longshoremen settings'
>>> next(g)
'inundated mules coevals vicious'
答案 1 :(得分:2)
import random
random.choice(['password', 'password1'])
答案 2 :(得分:0)
首先,为生成的密码定义要选择的字符,string module中定义的常量在此处可能会有所帮助。然后,使用random module选择这些字符的随机选择,例如:
import string
import random
def random_password(alphabet=string.ascii_letters+string.digits, length=8):
return ''.join(random.sample(alphabet, length))
>>> random_password()
'KwYGBtFb'
>>> random_password()
'CJOSx8tj'
>>> random_password()
'62BNJyX5'
答案 3 :(得分:0)
您可以使用uuid module
import uuid
print uuid.uuid4()
答案 4 :(得分:0)
请注意,随机生成密码几乎总是一个坏主意。而是使用长唯一的重置键实现某种密码重置算法。例如,根据Andbrews的回答用uuid生成。
然而,如果你以某种方式无法实现重置程序,可能是因为你的客户/老板只是拒绝听取理由,那么至少实现一个功能,这意味着一旦用户收到他的新密码,他必须将其更改为新密码,以便提供给用户的密码(在纸上或通过电子邮件,因此可供所有人使用)必须更改为他/她知道的内容。
要考虑的另一件事是确保密码无法猜测,即使您知道以前发出的密码。因此,请勿使用随机模块。我引用:
Python使用Mersenne Twister作为核心生成器。它产生 53位精度浮点数,周期为2 ** 19937-1。潜在的 C中的实现既快又线程安全。 Mersenne Twister 是最广泛测试的随机数发生器之一 存在。但是,完全确定性,它是不合适的 出于所有目的,并且完全不适合加密 目的。
相反,随机密码的基础应为os.urandom()
。但是,它会生成一系列二进制字节,因此必须进行更改。可以使用binascii
模块。我建议使用hexlify(),它使密码最容易输入,根本没有奇怪的字符:
>>> import os
>>> import binascii
>>> binascii.hexlify(os.urandom(10)).strip()
'7b2d0d5e40c18938bca9'