我正在尝试创建一个密码生成器。我已经想出了如何确保密码具有数字,大写和小写字符。密码是从string.printable
函数随机生成的。
这是我在密码中使用的string.printable
的一部分:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[]^_`{|}~
我正在尝试确保至少一个角色属于!
到~
的索引范围,这将确保我的密码中有一个特殊的字符。有人可以帮我吗?
这是我的代码:
import random
import string
def password_generator(length):
while True:
my_password = ''
for eachItem in range(length):
my_password += string.printable[random.randint(0, len(string.printable) - 7)]
if (any(x.isupper() for x in my_password) and any(x.islower() for x in my_password)
and any(x.isdigit() for x in my_password)):
return my_password
pass_length = int(input("Enter desired length of password: "))
print(password_generator(pass_length))
更轻松:
- 选择每个特殊组的1个随机字母
- 选择所有可能字符的剩余字母
- 将它们混合并将字母加入单词
import random
import string
def password_generator(length):
allchar = string.printable # that is about what your choice of characters is
low = string.ascii_lowercase
hig = string.ascii_uppercase
spec = string.punctuation
nums = string.digits
pw = []
# ensure that each group has at least 1 character of these groups
pw.append(random.choice(low))
pw.append(random.choice(hig))
pw.append(random.choice(spec))
pw.append(random.choice(nums))
# and fill up with random from all groups
pw.extend(random.choices(allchar, k=length-len(pw)))
# mix the positions up
random.shuffle(pw)
# return as string
return "".join(pw)
pass_length = int(input("Enter desired length of password: "))
for _ in range(10):
print(password_generator(pass_length))
输出:
b]gDEK7:wM9_T__N:ugO
l1c2p3"rW)FB@=k]'1p~
9U=M'R3"Kbzqo/~8+Dr{
g`_w7tvL#Ulto&Q4Qi]"
O7(DttWffx4N7lr~B)h$
Azd2[HHTn:X!L5^'~`
%Sq}be2V<eM^$$;)V@
1}W{iBhV;u<D2@f5m8P
E3vmhWxaWR'9hMeiU+1$
您的主要建议是生成包含特殊字符的密码,而不是检查这些密码是否包含特殊字符,但是无论如何,如果要检查它,只需使用以下代码:
start = string.printable.find('!')
end = string.printable.find('~') + 1
special_chars = string.printable[start:end]
has_special_character = any(map(lambda c: c in chars, my_password))