0.目标描述

  • 我们在使用各类网站或系统的时候,经常会遇到系统要求你设置的密码符合一定的要求才能通过;
  • 有时候还会根据密码的强度给你标上【强】【中等】【弱】等等;
  • 实际上,密码的强度指的是破解的理论平均次数;
  • 今天我就用Python实现一下这个判断的过程。

1.密码判断指标设定

  • 首先,密码长度要介于8-16位之间;
  • 其次,密码中需要包含字母
  • 此外,密码中需要包含数字
  • 最后,密码尝试修改次数不大于3次

2.实现与结果

注释很详细,应该很容易看懂。

"""
    实现密码强度的判断
    输入:密码字符串
    输出:密码强度
    过程:若不符合要求重复修改
    要求为:
 - 首先,密码长度要介于**8-16**位之间;
 - 其次,密码中需要**包含字母**;
 - 此外,密码中需要**包含数字**;
 - 最后,密码尝试修改次数不大于**3次**。
"""


# 给密码评级,符合一个要求即加一颗星
def rank_password(password):
    pwd_rank = 0
    if has_number(password):  # 判断密码中是否存在数字,存在则评价加1
        pwd_rank += 1

    if has_letter(password):  # 判断密码中是否存在字母,存在则评级加1
        pwd_rank += 1

    if 8 <= len(password) <= 16:  # 如果密码长度符合要求则评级加1
        pwd_rank += 1

    if pwd_rank == 3:
        print("密码强度:强(☆☆☆)")
    elif pwd_rank == 2:
        print("密码强度:中等(☆☆)")
    elif pwd_rank == 1:
        print("密码强度:弱(☆)")
        print("密码设置不成功!")  # 如果仅有一条标准符合,则返回失败
        return False
    print("密码设置成功!")
    return True


# 判断密码当中是否存在数字
def has_number(pwd):
    for c in pwd:
        if c.isnumeric():
            return True
    return False


# 判断密码当中是否存在字母
def has_letter(pwd):
    for c in pwd:
        if c.isalpha():
            return True
    return False


# 接收用户输入,并传入方法当中
def main():
    setting_times = 1
    while setting_times <= 3:
        pwd = input("请输入密码:")
        if rank_password(pwd):  # 如果密码设置成功,则跳出循环
            break
        else:
            setting_times += 1
    if setting_times > 3:  # 如果密码设置次数到达上限,则输出提示
        print("尝试次数超过上限(3次)!密码设置失败!")


if __name__ == '__main__':
    main()
Y:\Python\Anaconda\python.exe Y:/PythonWorkspace/PasswordReliablity/PasswordRank.py
请输入密码:123
密码强度:弱(☆)
密码设置不成功!
请输入密码:123yh
密码强度:中等(☆☆)
密码设置成功!

Process finished with exit code 0
Y:\Python\Anaconda\python.exe Y:/PythonWorkspace/PasswordReliablity/PasswordRank.py
请输入密码:yh12345678
密码强度:强(☆☆☆)
密码设置成功!

Process finished with exit code 0
Y:\Python\Anaconda\python.exe Y:/PythonWorkspace/PasswordReliablity/PasswordRank.py
请输入密码:1
密码强度:弱(☆)
密码设置不成功!
请输入密码:11
密码强度:弱(☆)
密码设置不成功!
请输入密码:11
密码强度:弱(☆)
密码设置不成功!
尝试次数超过上限(3次)!密码设置失败!

Process finished with exit code 0