鱼C论坛

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

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

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

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

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

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

在原代码基础上,如果想加入一个:”不是高级密码就要重新输入并检测直到是高级密码为止“的功能,该如何实现
小白刚开始学~~求大佬带hhhh
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
hard = 0
password = input('请输入需要检查的密码:')
length = len(password)
if length <= 8:
    print('您的密码安全级别评定为:低\n请按以下方式提升密码等级:\n1.密码必须由数字、字母及特殊字符三种组合\n2.密码只能由字母开头\n3.密码长度不能低于16位')
elif length < 16:
    for each in password:
        if each in nums:
            hard += 1
            break
    for each in password:
        if each in chars:
            hard += 1
            break
    for each in password:
        if each in symbols:
            hard += 1
            break
    if hard >= 2:
        print('您的密码安全级别评定为:中\n请按以下方式提升密码等级:\n1.密码必须由数字、字母及特殊字符三种组合\n2.密码只能由字母开头\n3.密码长度不能低于16位')
    if hard < 2:
        print('您的密码安全级别评定为:低\n请按以下方式提升密码等级:\n1.密码必须由数字、字母及特殊字符三种组合\n2.密码只能由字母开头\n3.密码长度不能低于16位')
else:
    for each in password:
        if each in nums:
            hard += 1
            break
    for each in password:
        if each in chars:
            hard += 1
            break
    for each in password:
        if each in symbols:
            hard += 1
            break
    if hard == 2:
        print('您的密码安全级别评定为:中\n1.密码必须由数字、字母及特殊字符三种组合\n2.密码只能由字母开头\n3.密码长度不能低于16位')
    if hard < 2:
        print('您的密码安全级别评定为:低\n1.密码必须由数字、字母及特殊字符三种组合\n2.密码只能由字母开头\n3.密码长度不能低于16位')
    if hard > 2:
        if password[0] in chars:
            print('您的密码安全级别评定为:高\n请继续保持^^')
        else:
            print('您的密码安全级别评定为:低\n1.密码必须由数字、字母及特殊字符三种组合\n2.密码只能由字母开头\n3.密码长度不能低于16位') 
        

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

使用道具 举报

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

使用道具 举报

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

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

def isHigh(passwords):
    if len(passwords) < 16:
        return False
    #如果密码长度不足,返回False
    
    elif not isTrue(passwords[0],chars):
        return False
    #如果密码首字母不是英文开头,返回False
    
    elif not isTrue(passwords,symbols):
        return False
    #如果密码不包含特殊字符,返回False
    
    elif not isTrue(passwords,nums):
        return False
    #如果密码不包含数字,返回False
    
    else:
        return True
    #如果全部包含返回True
    
while True:
    password = input('请输入需要检查的密码,输入 X 退出:')
    if password in "Xx":
        print('退出')
        break
    if isHigh(password):
        print('您的密码安全级别评定为:高\n请继续保持^^')
        continue
        #break
        #如果满足条件想退出 改为 break 即可
    else:
        print('您的密码安全级别不够,请按照以下规则修改\n1.密码必须由数字、字母及特殊字符三种组合\n2.密码只能由字母开头\n3.密码长度不能低于16位')
        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 编辑

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

def check(p: 'passwords') -> bool:
    if len(p) < limit:
        return False
    elif ord(p[0]) not in caps:
        return False
    return (any([bool(ord(i) in caps) for i in p])\
        and any([bool(ord(i) in digits) for i in p])\
            and any([bool(ord(i) in symbols) for i in p]))

print(check(input('請輸入密碼:\n')))
輸入/輸出結果:
請輸入密碼:
fsdfdsf5643564354%^$^&%%*HGFDFJ
True

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 13:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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