Python psswrd generator: length and numbers



我正在做这个项目,我必须制作python密码生成器,长度应该在12到30个字符之间,字符应该是字母和数字的组合,字母应该大写和小写。我有给我密码的代码,这是代码:

import random
import string
letters = ("string.ascii_letters")
digits = ("string.digits")
length = random.randint(12,30)
psswrd = ""
for i in range(length):
rndmlttrs = random.randrange(len(letters))
rndmdgts = random.randrange(len(digits))
psswrd = psswrd + letters[rndmlttrs] + digits[rndmdgts]
print(psswrd)

但是,当我运行它时,它给了我看起来像这样的东西: encinntgl.iieil.crggei_gng.t_nsi.itiltr.itsgagtrgtedldtsn.

它不仅不包含大写、小写和数字的组合,还超出了所需的范围,我不知道我做错了什么,所以如果有人可以帮助我,我将不胜感激。

当前代码中最大的问题是将字符串分配给lettersdigits,而不是要从string库中访问的实际项目。 请尝试:

letters = string.ascii_letters
digits = string.digits

但。。。

您不应该使用随机库来生成密码,因为它在加密上不是安全的

请改用secrets库。

特别是,应优先使用机密,而不是随机模块中的默认伪随机数生成器,后者专为建模和模拟而设计,而不是用于安全性或密码学。

几个问题: 正如其他人提到的,你使用了string.ascii_lettersstring.digits错了。 其次,在你的循环中,你把随机生成的字符数加倍了,因为你同时添加了字母和数字......因此,您可以除以 2,也可以从 6 到 15,如下所示。

import random
import string
letters = string.ascii_letters
digits = string.digits
length = random.randint(6,15)
psswrd = ""
for i in range(length):
rndmlttrs = random.randrange(len(letters))
rndmdgts = random.randrange(len(digits))
psswrd = psswrd + letters[rndmlttrs] + digits[rndmdgts]
print(psswrd)

但是,请注意,这将为您提供一个始终在字母和数字之间交替的密码。 更好的方法是:

letters = string.ascii_letters
digits = string.digits
choice = letters + digits*5
length = random.randint(12,30)
psswrd = ""
for i in range(length):
rndmlttrs = random.randrange(len(choice))
psswrd = psswrd + choice[rndmlttrs]
print(psswrd)

在这个解决方案中,我组合了您的数字和字母字符串,并使它们几乎具有相同的长度(乘以 5(,因此获得字母或数字的机会相等。 然后我从那个连接的字符串中选择。

最新更新