python - 在 Python 3 中生成符合要求的随机字符串

标签 python random

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

使用以下代码,我可以生成一个随 secret 码并检查它是否包含特殊字符。生成新密码,直到找到特殊字符。

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)])

下面的问题是它只检查特殊字符并生成新密码可能会摆脱其他要求(假设它们存在)。如何有效地实现 AD 密码要求?感谢您的帮助。

最佳答案

您可以首先生成一个匹配密码,方法是首先选择一个特殊字符和一个数字(以及一个小写字母和一个大写字母,方式相同),填写任何内容,最后打乱顺序:

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)

关于python - 在 Python 3 中生成符合要求的随机字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33774805/

相关文章:

python - 错误 : Class advice impossible in Python3 topia. termextract

python - Celery 任务获取 SoftTimeLimitExceeded 调用 API

java - 随机方法的效率

c - 如何创建保存从 0000 到 1000 的银行帐号的随机访问文件

c++ - C++中最随机的函数是什么?

python - 通过 MySQLdb 使用 Python 插入 MySQL 数据库

python - 使用 Python 子进程执行 tar 命令在给定 --exclude 选项时不会排除某些文件

python - 如何使用 xpath 和 for 循环(python)更改 xml 中的节点值?

python - 如何使用 numpy.random.rand 设置生成点的最小距离约束?

java - 随机枚举返回 null