鱼C论坛

 找回密码
 立即注册
查看: 2400|回复: 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
  1. length = len(passwd)
复制代码
在验证过一次密码强度后,需要重启程序,不知道该怎么处理,是我缩进的问题吗?

因为你在 continue 前面加上了 break  退出循环
还有个地方可以去掉:
  1. number = "0123456789"
  2. letter = "abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  3. symbool = r"~!@#$%^&*()_=-/,.?\\<>;:[]{}|"
  4. x = 0
  5. y = 0
  6. z = 0
  7. while True:
  8.     passwd = input("请输入密码:")
  9.     length = len(passwd)
  10.     while (passwd.isspace() or length == 0):
  11.         passwd = input("您输入的密码为空,请重新输入:")
  12.         length = len(passwd)
  13.     if  length <= 8 or passwd.isdigit() or passwd.isalpha():
  14.         print("这是一个低级密码")
  15.         continue
  16.     elif length > 8:
  17.         for each in passwd:
  18.             if each in number:
  19.                 x += 1
  20.                 break
  21.         for each in passwd:
  22.             if each in letter:
  23.                 y += 1
  24.                 break
  25.         for each in passwd:
  26.             if each in symbool:
  27.                 z += 1
  28.                 break
  29.     if x + y + z > 1 and length < 16:
  30.         print("这是一个中级密码")
  31.         continue
  32.     if x + y + z == 3 and length >= 16 :
  33.         print("这是一个高级密码")
  34.         continue

  35.     print("无法识别,不属于三种密码中任何一种!!!")
复制代码
小甲鱼最新课程 -> https://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
  1. length = len(passwd)
复制代码
在验证过一次密码强度后,需要重启程序,不知道该怎么处理,是我缩进的问题吗?

因为你在 continue 前面加上了 break  退出循环
还有个地方可以去掉:
  1. number = "0123456789"
  2. letter = "abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  3. symbool = r"~!@#$%^&*()_=-/,.?\\<>;:[]{}|"
  4. x = 0
  5. y = 0
  6. z = 0
  7. while True:
  8.     passwd = input("请输入密码:")
  9.     length = len(passwd)
  10.     while (passwd.isspace() or length == 0):
  11.         passwd = input("您输入的密码为空,请重新输入:")
  12.         length = len(passwd)
  13.     if  length <= 8 or passwd.isdigit() or passwd.isalpha():
  14.         print("这是一个低级密码")
  15.         continue
  16.     elif length > 8:
  17.         for each in passwd:
  18.             if each in number:
  19.                 x += 1
  20.                 break
  21.         for each in passwd:
  22.             if each in letter:
  23.                 y += 1
  24.                 break
  25.         for each in passwd:
  26.             if each in symbool:
  27.                 z += 1
  28.                 break
  29.     if x + y + z > 1 and length < 16:
  30.         print("这是一个中级密码")
  31.         continue
  32.     if x + y + z == 3 and length >= 16 :
  33.         print("这是一个高级密码")
  34.         continue

  35.     print("无法识别,不属于三种密码中任何一种!!!")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

如果我想表达中级密码是字母,数字和特殊符号间两两任意组合要怎么写这句话啊,大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


按你原本那样可以丫 x + y + z == 2
只是你其他地方要多改动,因为改了这个漏洞了部分
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 03:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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