在Python 3中生成带有需求的随机字符串

str*_*bad 1 python random

我正在尝试为Active Directory生成具有以下密码要求的随机密码:至少8个字符,至少一个特殊字符,至少一个数字,至少一个小写字母和至少一个大写字母.

使用以下代码,我能够生成随机密码并检查它是否包含特殊字符.生成新密码,直到找到特殊字符.

special_char = "!@%/()=?+.-"

password_string = "".join([random.choice(string.ascii_lowercase + string.ascii_digits + string.ascii_uppercase + special_char) for n in range(8)])

while any(c in password_string for c in special_char) is not True:
    password_string = "".join([random.choice(string.ascii_lowercase + string.ascii_digits + string.ascii_uppercase + special_char) for n in range(8)])
Run Code Online (Sandbox Code Playgroud)

以下问题是它只检查特殊字符并生成新密码可能会消除假设它们存在的其他要求.如何有效地实施AD密码要求?谢谢你的帮助.

Ulr*_*arz 6

您可以首先生成一个匹配的密码,首先选择一个特殊的字符和一个数字(以相同的方式选择一个低位字母和一个大写字母),填充任何内容,然后在最后调整顺序:

pwlist = ([random.choice(special_char),
           random.choice(string.ascii_digits),
           random.choice(string.ascii_lowercase),
           random.choice(string.ascii_uppercase),
          ]  
         + [random.choice(string.ascii_lowercase
                          + string.ascii_uppercase
                          + special_char
                          + string.ascii_digits) for i in range(4)])
random.shuffle(pwlist)
pw = ''.join(pwlist)
Run Code Online (Sandbox Code Playgroud)