鱼C论坛

 找回密码
 立即注册
查看: 2213|回复: 3

[已解决]密码强度检验问题,虽然已经搜索过论坛,但还有一些不解,求求大佬帮助

[复制链接]
发表于 2020-5-25 17:40:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
number = "0123456789"
letter = "abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
symbool = r"~!@#$%^&*()_=-/,.?\\<>;:[]{}|"
x = 0
y = 0
z = 0
while True:
    passwd = input("请输入密码:")
    length =len(passwd)
    while(passwd.isspace()or length == 0):
        passwd=input("您输入的密码为空,请重新输入:")
    if length <= 8 and (passwd.isdigit() or passwd.isalpha()):
        print("这是一个低级密码")
        break
        continue
    if length > 8:
        for each in passwd:
            if each in number:
                x += 1
                break
        for each in passwd:
            if each in letter:
                y += 1
                break
        for each in passwd:
            if each in symbool:
                z += 1
                break
    if x + y + z == 2:
        print("这是一个中级密码")
        break
        continue
    n = 1 if passwd[0] in letter else 0
    if x + y + z == 3 and length >= 16 and n:
        print("这是一个高级密码")
        continue
        
    print("无法识别,不属于三种密码中任何一种!!!")






运行后,如果第一遍密码输入为空,此后再输入密码,有时会返回无法识别,不属于三种密码中的一种,
还有,在验证过一次密码强度后,需要重启程序,不知道该怎么处理,是我缩进的问题吗?希望各位大佬帮忙解答一下
最佳答案
2020-5-25 17:49:12
本帖最后由 Twilight6 于 2020-5-25 19:07 编辑

运行后,如果第一遍密码输入为空,此后再输入密码,有时会返回无法识别,不属于三种密码中的一种,

如果你输入空格 因为你值判定一次 length =len(passwd) 长度 在 while 循环里没有重新给予 赋值 导致
while(passwd.isspace()or length == 0)  条件里的 length == 0 一直成立 死循环 ,需要在循环下加上重新判断length
length = len(passwd)
在验证过一次密码强度后,需要重启程序,不知道该怎么处理,是我缩进的问题吗?

因为你在 continue 前面加上了 break  退出循环
还有个地方可以去掉:
number = "0123456789"
letter = "abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
symbool = r"~!@#$%^&*()_=-/,.?\\<>;:[]{}|"
x = 0
y = 0
z = 0
while True:
    passwd = input("请输入密码:")
    length = len(passwd)
    while (passwd.isspace() or length == 0):
        passwd = input("您输入的密码为空,请重新输入:")
        length = len(passwd)
    if  length <= 8 or passwd.isdigit() or passwd.isalpha():
        print("这是一个低级密码")
        continue
    elif length > 8:
        for each in passwd:
            if each in number:
                x += 1
                break
        for each in passwd:
            if each in letter:
                y += 1
                break
        for each in passwd:
            if each in symbool:
                z += 1
                break
    if x + y + z > 1 and length < 16:
        print("这是一个中级密码")
        continue
    if x + y + z == 3 and length >= 16 :
        print("这是一个高级密码")
        continue

    print("无法识别,不属于三种密码中任何一种!!!")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-25 17:49:12 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-5-25 19:07 编辑

运行后,如果第一遍密码输入为空,此后再输入密码,有时会返回无法识别,不属于三种密码中的一种,

如果你输入空格 因为你值判定一次 length =len(passwd) 长度 在 while 循环里没有重新给予 赋值 导致
while(passwd.isspace()or length == 0)  条件里的 length == 0 一直成立 死循环 ,需要在循环下加上重新判断length
length = len(passwd)
在验证过一次密码强度后,需要重启程序,不知道该怎么处理,是我缩进的问题吗?

因为你在 continue 前面加上了 break  退出循环
还有个地方可以去掉:
number = "0123456789"
letter = "abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
symbool = r"~!@#$%^&*()_=-/,.?\\<>;:[]{}|"
x = 0
y = 0
z = 0
while True:
    passwd = input("请输入密码:")
    length = len(passwd)
    while (passwd.isspace() or length == 0):
        passwd = input("您输入的密码为空,请重新输入:")
        length = len(passwd)
    if  length <= 8 or passwd.isdigit() or passwd.isalpha():
        print("这是一个低级密码")
        continue
    elif length > 8:
        for each in passwd:
            if each in number:
                x += 1
                break
        for each in passwd:
            if each in letter:
                y += 1
                break
        for each in passwd:
            if each in symbool:
                z += 1
                break
    if x + y + z > 1 and length < 16:
        print("这是一个中级密码")
        continue
    if x + y + z == 3 and length >= 16 :
        print("这是一个高级密码")
        continue

    print("无法识别,不属于三种密码中任何一种!!!")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 20:02:30 | 显示全部楼层
Twilight6 发表于 2020-5-25 17:49
如果你输入空格 因为你值判定一次 length =len(passwd) 长度 在 while 循环里没有重新给予 赋值 导致
  ...

如果我想表达中级密码是字母,数字和特殊符号间两两任意组合要怎么写这句话啊,大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 20:06:09 | 显示全部楼层
ghser 发表于 2020-5-25 20:02
如果我想表达中级密码是字母,数字和特殊符号间两两任意组合要怎么写这句话啊,大佬


按你原本那样可以丫 x + y + z == 2
只是你其他地方要多改动,因为改了这个漏洞了部分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 17:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表