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