Python psswrd生成器:​​长度和数字

时间:2018-05-02 19:33:40

标签: python

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

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。

它不仅不包含大写,小写和数字的组合,它超出了所需的范围,我不知道我做错了什么,所以如果有人可以帮助我,我会#39 ;很欣赏它。

2 个答案:

答案 0 :(得分:1)

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

letters = string.ascii_letters
digits = string.digits

<强>但...

您不应该使用随机库来生成密码,因为它不具有加密安全性

而是使用secrets库。

  

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

答案 1 :(得分:1)

几个问题: 正如其他人所提到的,您使用的是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),这样就可以获得一个字母或数字。然后我从那个联合字符串中选择。