鱼C论坛

 找回密码
 立即注册
查看: 2896|回复: 1

求助第十四课检测密码强度问题!

[复制链接]
发表于 2017-7-21 18:00:31 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 test1 于 2017-7-21 18:06 编辑
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'

passwd = input('请输入需要检查的密码组合:')

# 判断长度
length = len(passwd)

while (passwd.isspace() or length == 0) :
    passwd = input("您输入的密码为空(或空格),请重新输入:") 
#问题1 如果不符合输入要求,重新输入一个字符串,需要重新对其长度进行判断吧?
if length <= 8:
    flag_len = 1
elif 8 < length < 16:
    flag_len = 2
else:
    flag_len = 3

flag_con = 0

# 判断是否包含特殊字符
for each in passwd:
    if each in symbols:
        flag_con += 1
        break
    
# 判断是否包含字母
for each in passwd:
    if each in chars:
        flag_con += 1
        break

# 判断是否包含数字
for each in passwd:
    if each in nums:
        flag_con += 1
        break    

# 打印结果
while 1 :
    print("您的密码安全级别评定为:", end='')
    if flag_len == 1 or flag_con == 1 :
        print("低")  #问题2.  逻辑判断条件是否与要求一致?
    elif flag_len == 2 or flag_con == 2 :
        print("中")  #问题3.  逻辑判断条件是否与要求一致?
    else :
        print("高")
        print("请继续保持")
        break

    print("请按以下方式提升您的密码安全级别:\n\
    \t1. 密码必须由数字、字母及特殊字符三种组合\n\
    \t2. 密码只能由字母开头\n\
    \t3. 密码长度不能低于16位'")
    break

这是小甲鱼老师写的代码,确实能读懂了,现在我自己想改编一下
条件我读取pass.txt 循环里面的字符串,也判断长度和代表值,但是我一直解决了当前问题但感觉没处理好还是没达到自己理想的,我最终意思是
“比如我flag_con=1 包含特殊字符 flag_con=2包含小写字母, 这时我在pass.txt里面搜索,比如查到1qaz!QAZ 这时候1qaz!QAZ长度即大于8个字符又包含小写又包含特殊字符就打印出来,如果查到adbbs123这样就不打印,虽然包含了小写字母但是不包含特殊字符,这样就不打印 ”
问问鱼油帮忙解决,我也想学习学习到底是哪里的思路不对,下面是我的代码,后面也想不出了
#!/usr/bin/env python                         
# -*- coding:utf-8 -*-                        
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<
chars = 'abcdefghijklmnopqrstuvwxyz'          
nums = '0123456789'                           
bigchars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'       
                                              
passwd = open(r'pass.txt','r')                
for each in passwd.readlines():               
    length = len(each)                        
    if length >= 9:                           
        flag_len = 1                          
        #print(flag_len)                      
    flag_con = 0                              
        #判断密码含有特殊字符                           
    for x in each:                            
        if x in symbols:                      
            flag_con += 1                     
            #print(flag_con)                  
                    #print(each.strip('\n'))  
            break                             
            #判断密码含有小写字母                       
    for x in each:                            
         if x in chars:                       
            flag_con += 1                     
            #print(flag_con)                  
                        #print(each)          
            break                             
            #判断密码含有数字                         
    for x in each:                            
        if x in nums:                         
            flag_con += 1                     
            #print(flag_con)                  
            break                             
            #判断密码含有大写字母                       
    for x in each:                            
        if x in bigchars:                     
            flag_con += 1                     
            #print(flag_con)                  
            #print(x)                         
            break                             
                                #print(each)  

pass.txt
123456
12345
5201314
a123456
1234567
12345678
123456789
123qwe
12345678a
a12345678
Aa888888
password
passw0rd
Passw0rd
p@ssw0rd
zaq!2WSX
zaq_3ed
1q2w3E4R
1q2w3e4r
2wsxCDE#
qwerasdf
!qazXSW2
@wsxZAQ1
xsw@ZAQ1
1234qwer
1234qwe
123qwe!@#
qwe123!@#
1qaz!QAZ
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-21 22:52:13 | 显示全部楼层
本帖最后由 ba21 于 2017-7-21 22:54 编辑

封装成一个函数不知道有多好:
def passwordStren(password):
    symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
    chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    nums = '0123456789'

    passwd = password

    length = len(passwd)
    while (passwd.isspace() or length == 0) :
        return False
        #passwd = input("您输入的密码为空(或空格),请重新输入:") 
    if length <= 8:
        flag_len = 1
    elif 8 < length < 16:
        flag_len = 2
    else:
        flag_len = 3

    flag_con = 0

    # 判断是否包含特殊字符
    for each in passwd:
        if each in symbols:
            flag_con += 1
            break
        
    # 判断是否包含字母
    for each in passwd:
        if each in chars:
            flag_con += 1
            break

    # 判断是否包含数字
    for each in passwd:
        if each in nums:
            flag_con += 1
            break    

    if flag_len >= 3 or flag_con >= 3 :
        return True
    else:
        return False

try:
    with open(r"pass.txt","r") as f:
        for each_line in f:
            if passwordStren(each_line[:-1]):
                print(each_line[:-1])
except OSError as reason:
    print(str(reasson))
    
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-23 14:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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