python - Python 中的密码测试

标签 python

我有以下代码来测试密码的强度:

import string
def golf(password):
    if len(password) >= 10:
        if any(char.isdigit() for char in password):
            if any(string.punctuation for char in password):
                if any(char.isalpha() for char in password):
                    if any(char.isupper() for char in password):
                        if any(char.islower() for char in password):
                            return True
    return False

我知道还可以做得更好!它需要测试以下内容...

如果满足以下条件,密码将被视为足够强: 至少有 10 个字符 至少包含一位数字 至少包含一个大写字母 至少包含一个小写字母。密码只能包含 ASCII 拉丁字母或数字,但不能标点符号。

编辑

好吧,对于其他人来说,我用正则表达式将其简化为以下内容。

import re
def golf(password):
    return re.match( r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.{10,30}).+$', password)

显然它还可以更短......

最佳答案

事实上,你已经很接近了。是的,您有多种条件需要检查;规则就是这种复杂性。请注意,您不必检查 alpha:检查 islowerisupper 即可覆盖这一点。您可以通过将规则放入单个表达式中来使处理更容易一些:

import string
def golf(password):
    return \
        len(password) >= 10                              and \
        any(char.isdigit() for char in password)         and \
        not any(string.punctuation for char in password) and \
        any(char.isupper() for char in password)         and \
        any(char.islower() for char in password)

请注意,您正在计算 bool 表达式:只需返回该值。无需多言

if <expr>:
    return True
else:
    return False

您已经拥有手中的值(value);只需返回即可。

关于python - Python 中的密码测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45179130/

相关文章:

python - 设置颜色以用于使用 matplotlib contourf 绘制的数组屏蔽值

python - Tornado vs wsgi(与 gunicorn)

python - 如何在 Google App Engine 中使用 Python(和 boto)通过浏览器从 Amazon S3 下载文件?

python - 在opencv中填充轮廓

python - 如何在python中使用libxml2编写xml文件?

python - 如何将参数传递给 AutoMLConfig 中的 get_data 脚本

python - 将 Pandas DataFrame 转换为列表

python - 一个时间序列的网格数据最实用的python数据结构是什么?

python - 生日悖论列表是非类型

python - 修改后的一维数组的 k 均值算法,其中顺序很重要