鱼C论坛

 找回密码
 立即注册
查看: 1405|回复: 4

【课后作业14讲】密码安全性检查程序改进

[复制链接]
发表于 2021-2-6 19:33:27 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 KAKA学python 于 2021-2-6 22:41 编辑

在原代码基础上,如果想加入一个:”不是高级密码就要重新输入并检测直到是高级密码为止“的功能,该如何实现
小白刚开始学~~求大佬带hhhh
  1. symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
  2. chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  3. nums = '0123456789'
  4. hard = 0
  5. password = input('请输入需要检查的密码:')
  6. length = len(password)
  7. if length <= 8:
  8.     print('您的密码安全级别评定为:低\n请按以下方式提升密码等级:\n1.密码必须由数字、字母及特殊字符三种组合\n2.密码只能由字母开头\n3.密码长度不能低于16位')
  9. elif length < 16:
  10.     for each in password:
  11.         if each in nums:
  12.             hard += 1
  13.             break
  14.     for each in password:
  15.         if each in chars:
  16.             hard += 1
  17.             break
  18.     for each in password:
  19.         if each in symbols:
  20.             hard += 1
  21.             break
  22.     if hard >= 2:
  23.         print('您的密码安全级别评定为:中\n请按以下方式提升密码等级:\n1.密码必须由数字、字母及特殊字符三种组合\n2.密码只能由字母开头\n3.密码长度不能低于16位')
  24.     if hard < 2:
  25.         print('您的密码安全级别评定为:低\n请按以下方式提升密码等级:\n1.密码必须由数字、字母及特殊字符三种组合\n2.密码只能由字母开头\n3.密码长度不能低于16位')
  26. else:
  27.     for each in password:
  28.         if each in nums:
  29.             hard += 1
  30.             break
  31.     for each in password:
  32.         if each in chars:
  33.             hard += 1
  34.             break
  35.     for each in password:
  36.         if each in symbols:
  37.             hard += 1
  38.             break
  39.     if hard == 2:
  40.         print('您的密码安全级别评定为:中\n1.密码必须由数字、字母及特殊字符三种组合\n2.密码只能由字母开头\n3.密码长度不能低于16位')
  41.     if hard < 2:
  42.         print('您的密码安全级别评定为:低\n1.密码必须由数字、字母及特殊字符三种组合\n2.密码只能由字母开头\n3.密码长度不能低于16位')
  43.     if hard > 2:
  44.         if password[0] in chars:
  45.             print('您的密码安全级别评定为:高\n请继续保持^^')
  46.         else:
  47.             print('您的密码安全级别评定为:低\n1.密码必须由数字、字母及特殊字符三种组合\n2.密码只能由字母开头\n3.密码长度不能低于16位')
复制代码

        

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-6 19:41:23 | 显示全部楼层
你高中低的标准时什么?其实只要一个函数不就好了么,函数返回 1 2 3分别代表 低 中 高
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-6 20:00:55 | 显示全部楼层
  1. symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
  2. chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  3. nums = '0123456789'

  4. def isTrue(passwords,kinds):
  5.     for i in passwords:
  6.         if i in kinds:
  7.             return True
  8.     #判断函数,如果 passwords 中包含有该 kinds 中返回 True

  9. def isHigh(passwords):
  10.     if len(passwords) < 16:
  11.         return False
  12.     #如果密码长度不足,返回False
  13.    
  14.     elif not isTrue(passwords[0],chars):
  15.         return False
  16.     #如果密码首字母不是英文开头,返回False
  17.    
  18.     elif not isTrue(passwords,symbols):
  19.         return False
  20.     #如果密码不包含特殊字符,返回False
  21.    
  22.     elif not isTrue(passwords,nums):
  23.         return False
  24.     #如果密码不包含数字,返回False
  25.    
  26.     else:
  27.         return True
  28.     #如果全部包含返回True
  29.    
  30. while True:
  31.     password = input('请输入需要检查的密码,输入 X 退出:')
  32.     if password in "Xx":
  33.         print('退出')
  34.         break
  35.     if isHigh(password):
  36.         print('您的密码安全级别评定为:高\n请继续保持^^')
  37.         continue
  38.         #break
  39.         #如果满足条件想退出 改为 break 即可
  40.     else:
  41.         print('您的密码安全级别不够,请按照以下规则修改\n1.密码必须由数字、字母及特殊字符三种组合\n2.密码只能由字母开头\n3.密码长度不能低于16位')
  42.         continue

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-11 15:17:25 | 显示全部楼层
#check.py

i = str(input('请输入需要坚持的密码组合 '))

a = """~!@#$%^&*()_=-/,.?<>;:[]{}|\
"""
b = '0123456789'
c = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

o = 0
p = 0
q = 0

for each in i:
    if each in a:
        o += 1

for each in i:
    if each in b:
        p += 1

for each in i:
    if each in c:
        q += 1

while i:
    if  len(i) == p or len(i) == q or len(i) <= 8:
        print("""您的密码安全级别评定为:低
    请按以下方式提升您的密码安全级别:
    1. 密码必须由数字、字母及特殊字符三种组合
    2. 密码只能由字母开头
    3. 密码长度不能低于16位
    """)


    if (len(i) == (o+p)  or len(i) == (o+q) or len(i) == (p+q) or len(i) == o+p+q)  and len(i) != o and len(i) != p and len(i) != q and (16 > len(i) >8):
        print("""您的密码安全级别评定为:中
    请按以下方式提升您的密码安全级别:
    1. 密码必须由数字、字母及特殊字符三种组合
    2. 密码只能由字母开头
    3. 密码长度不能低于16位
    """)

    if len(i) == (o+p+q) and (i[0] in c) and len(i) >= 16:
        print("""您的密码安全级别评定为:高
    请继续保持
    """)

    str(input('请输入需要坚持的密码组合 '))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-4 13:25:38 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-9-4 14:26 编辑

代碼:
  1. limit = 16
  2. caps = [i for i in range(65, 91)]+[i for i in range(97, 123)]
  3. digits = [i for i in range(48, 58)]
  4. symbols = [i for i in range(33, 48)]+[i for i in range(58, 65)]+[91, 92, 93, 94, 95, 96, 123, 124, 125]

  5. def check(p: 'passwords') -> bool:
  6.     if len(p) < limit:
  7.         return False
  8.     elif ord(p[0]) not in caps:
  9.         return False
  10.     return (any([bool(ord(i) in caps) for i in p])\
  11.         and any([bool(ord(i) in digits) for i in p])\
  12.             and any([bool(ord(i) in symbols) for i in p]))

  13. print(check(input('請輸入密碼:\n')))
复制代码

輸入/輸出結果:
  1. 請輸入密碼:
  2. fsdfdsf5643564354%^$^&%%*HGFDFJ
  3. True

  4. 請輸入密碼:
  5. &*%abc
  6. False
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-4 11:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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