-1

在 Python 中,我想编写一个密码生成器。

您认为我应该在程序中添加哪些输入来帮助创建一个好的、强密码?

一句话回答就够了。我只想开始一个思考过程。

4

5 回答 5

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'
于 2013-01-24T05:43:32.403 回答
2
import random

random.choice(['password', 'password1'])
于 2013-01-24T05:18:01.653 回答
0

请注意,随机生成密码几乎总是一个坏主意。而是使用长的唯一重置密钥实现某种密码重置算法。例如,根据 Andbrews 的回答使用 uuid 生成。

但是,如果您以某种方式无法实现重置程序,可能是因为您的客户/老板只是拒绝听取原因,那么至少实现一个功能,即一旦用户收到他的新密码,他必须将其更改为一个新的,以便给用户的密码(在纸上或通过电子邮件,因此每个人都可以使用)必须更改为只有他/她知道的密码。

另一件要考虑的事情是确保密码是不可能猜到的,即使您知道以前发送的密码。因此,不要使用 random 模块。我引用:

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'
于 2013-01-24T05:48:28.410 回答
0

首先,定义为生成的密码选择哪些字符,字符串模块中定义的常量在这里可能会有所帮助。然后,使用random 模块随机选择这些字符,例如:

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'
于 2013-01-24T05:17:50.487 回答
0

您可以使用uuid 模块

import uuid
print uuid.uuid4()
于 2013-01-24T05:21:16.547 回答