小象学院—小象学院—Python学习联盟07—判断密码强弱

本文介绍了一种检测密码强度的方法,并逐步将其扩展至文件操作,包括读写密码及其实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

案例描述:

 

  • 密码强度:是指一个密码对抗猜测或暴力破解的有效程度;一般是指一个未授权的访问者得到正确密码的平均尝试次数。
  • 强密码可以降低安全漏洞的整体风险
  • 简易版(常用)规则:

                1.    密码长度至少8位

                2.    密码含有数字

                3.    密码含有字母

案例分析:

 

 

  • 设置一个变量strength_level用于记录密码的强弱,初始为0.满足一个条件,对其加1
  • 长度判断:使用len()方法
  • 包含数字判断:使用isnumeric()方法
  • 包含字母判断:使用isalpha()方法
  • 如果strength_level等于3,密码强度合格,否则不合格。

 

Python字符串:

 

  • str.isnumeric()            检测字符串是否只由数字组成
  • str.isalpha()            检测字符串是否只由字母组成tr
  • str.islower()            检测字符串中所有的字母是否都为小写
  • str.isupper()            检测字符串中所有的字母是否都为大写
  • 更多isxxxx()方法请参考:     https://docs.python.org/3/library/stdtypes.html#string-methods

           

代码:

 

 

  • 1.0版本:

 

'''
判断密码强弱
版本1.0
'''
def check_number(pass_word):
    for i in pass_word:
        if i.isnumeric():
            return True
    return False
def check_letter(pass_word):
    for i in pass_word:
        if i.isalpha():
            return True
    return False


def main():
    pass_word = input('请输入密码:')
    strength_level = 0      #密码强度

    if len(pass_word) < 7:
        print('密码长度不足7位')
    else:
        strength_level += 1

    if check_number(pass_word):
        strength_level += 1
    else:
        print('要求包含数字')

    if check_letter(pass_word):
        strength_level += 1
    else:
        print('要求包含字母')

    if strength_level == 3 :
        print('密码强度合格')
    else:
        print('不合格')



if __name__ == '__main__':

                main()

 

 

 

  • 版本2.0:(1)限制密码次数,比如最多尝试5次。(2)如何终止循环

 

'''
判断密码强弱
版本2.0
'''
def check_number(pass_word):
    has_number = False
    for i in pass_word:
        if i.isnumeric():
            has_number = True
            break
    return has_number
def check_letter(pass_word):
    has_letter = False
    for i in pass_word:
        if i.isalpha():
            has_letter = True
            break
    return has_letter


def main():

    try_times = 5
    while try_times > 0:
        pass_word = input('请输入密码:')
        strength_level = 0      #密码强度

        if len(pass_word) < 7:
            print('密码长度不足7位')
        else:
            strength_level += 1

        if check_number(pass_word):
            strength_level += 1
        else:
            print('要求包含数字')

        if check_letter(pass_word):
            strength_level += 1
        else:
            print('要求包含字母')

        if strength_level == 3 :
            print('密码强度合格')
            break
        else:
            print('不合格')
            try_times -= 1
    

 
if try_number <= 0 :

print('尝试超过5次。退出')

if __name__ == '__main__'

 main()

 

 

  • 版本3.0:保存设置的密码及其对应的强度到文件中。

文件的基础:

 

  • 文本文件:一般指只有字符编码存储的文件,能够被最简单的文本编辑器直接读取。
  • 编码:信息从一种形式转换为另一种形式的过程
  • 常用的编码:

            ASCII,Unicode,UTF-8....

 

  • 多行文本,用\n表示换行。

文件的操作:

 

  • 步骤:打开文件 -> 操作文件(读、写等) -> 关闭文件
  • 1.打开文件:建立文件与程序的关联

            open(filename,mode)

            filename:文件名(包括途径);mode:打开模式

            打开模式: r        只读,文件不存在则报错

                            w        只写,文件不存在则自动创建

                            a         在文件末尾附加

                            r+       读写

 

  • 2.操作文件:写入,读取,等

            写入操作:从计算机内存向文件写入数据

                            write():将文本数据写入文件中

                            writelines():将字符串列表写入文件中

 

  • 3.关闭文件:终止程序与文件的关联         close()

        

具体代码:(1)只在密码合格时存储:

 

if strength_level == 3 :
    print('密码强度合格')

    #写入文件中
    f = open('password_3.0_txt','a')
    f.write(pass_word)
    f.close()
    break

        其他不变。

(2)无论是否合格,都进行存储。

 

# 写入文件中
f = open('password_3.0_txt', 'a')
f.write(pass_word + '\n')
f.close()

if strength_level == 3 :
    print('密码强度合格')
    break

    其他不变。

(2.1)不仅存储密码,还存储强度。

 

# 写入文件中
f = open('password_3.0_txt', 'a')
f.write('密码是{},强度是{}\n'.format(pass_word,strength_level))
f.close()

if strength_level == 3 :
    print('密码强度合格')
    break

    其他不变。

 

  • 版本4.0:读取保存的密码

文件的操作:

 

  • 读取操作:从文件中读取数据到计算机内存中
  • read():返回值为包含整个文件内容的一个字符串
  • readline():返回值为文件下一行内容的字符串
  • readlines():返回值为整个文件内容的列表,每项是以换行符为结尾的一行字符串
  • 文件的遍历:
f = open ('tmp.txt','r')
for line in f.readlines():          #或 for line in f:
    #处理一行数据
    pass
f.close()

 

 

 

  •      代码:(1)      
#读取文件
f = open('password_3.0_txt','r')
#1.read()
content = f.read()
print(content)

f.close()

    

 

  •     代码:(2)

 

#读取文件
f = open('password_3.0_txt','r')
#2. readline()
line = f.readline()
print(line)
line = f.readline()
print(line)
f.close()

            只读两行。readline一次只读一行。

 

 

  •     代码:(3)

 

#读取文件
f = open('password_3.0_txt','r')
#3. readlines()
lines = f.readlines()
print(lines)

f.close()

        输出为:(以列表的形式)

 

 

 

  • 代码(4):读入:以列表形式读取文件,遍历:以行的形式遍历

 

#读取文件
f = open('password_3.0_txt','r')
#3. readlines()
lines = f.readlines()
for line in lines:
    print('read:{}'.format(line))

f.close()

输出为:

 

 

  • 具体代码实现:因为已经将密码保存到文件中。所以不需要再输入。

 

'''
判断密码强弱
4.0
'''

def check_number(pass_word):
    has_number = False
    for c in pass_word:
        if c.isnumeric():
            has_number = True
            break
    return has_number

def check_letter(pass_word):
    has_letter = False
    for c in pass_word:
        if c.isalpha():
            has_letter = True
            break
    return has_letter

def main():

    # try_number = 5              #限制密码尝试次数
    #
    # while try_number > 0:
    #     pass_word = input('请输入密码:')
    #     strength_level = 0          #设置密码强度
    #     #规则1
    #     if len(pass_word) >= 8:
    #         strength_level += 1
    #     else:
    #         print('密码位数至少为8位')
    #     #规则2
    #     if check_number(pass_word):
    #         strength_level += 1
    #     else:
    #         print('密码应该包含数字')
    #     #规则3
    #     if check_letter(pass_word):
    #         strength_level += 1
    #     else:
    #         print('密码应该包含字母')
    #
    #     #写文件
    #     f = open('password_3.0_txt','a')
    #     f.write('密码是{},密码强度是{}\n'.format(pass_word,strength_level))
    #     f.close()
    #
    #     if strength_level == 3:
    #         print('密码合格')
    #         break
    #     else:
    #         print('密码不合格')
    #         try_number -= 1
    # if strength_level != 3:
    #     print('密码设置次数过多。')

    # 读取文件
    f = open('password_3.0_txt', 'r')
    lines = f.readlines()
    for line in lines:
        print('read{}'.format(line))
    f.close()

if __name__ == '__main__':
    main()

 

 

 

  • 版本5.0:这些方法都是与‘密码操作’相关的,能否将这些方法封装成一个整体?
  • 即,将相关方法封装成一个整体:面向对象编程

 

 

'''
判断密码强弱
5.0
'''

class PasswordTool:
    '''
    密码工具类
    '''

    #定义类的属性
    def __init__(self,password):
        self.password = password
        self.strength_level = 0

    # 定义类的行为
    def process_password(self):
        # 规则1
        if len(self.password) >= 8:
            self.strength_level += 1
        else:
            print('密码位数至少为8位')
        # 规则2
        if self.check_number():
            self.strength_level += 1
        else:
            print('密码应该包含数字')
        # 规则3
        if self.check_letter():
            self.strength_level += 1
        else:
            print('密码应该包含字母')

    #类的方法
    def check_number(self):     #检查是否有数字
        has_number = False
        for c in self.password:
            if c.isnumeric():
                has_number = True
                break
        return has_number

    def check_letter(self):     #检查是否有字母
        has_letter = False
        for c in self.password:
            if c.isalpha():
                has_letter = True
                break
        return has_letter

def main():

    try_number = 5              #限制密码尝试次数

    while try_number > 0:
        pass_word = input('请输入密码:')

        #实例化密码工具对象
        password_tool = PasswordTool(pass_word)     #完成初始化
        password_tool.process_password()            #调用类

        #写文件
        f = open('password_5.0_txt','a')
        f.write('密码是{},密码强度是{}\n'.format(pass_word,password_tool.strength_level))
        f.close()

        if password_tool.strength_level == 3:
            print('密码合格')
            break
        else:
            print('密码不合格')
            try_number -= 1
    if try_number <= 0 :
        print('密码设置次数过多。')



if __name__ == '__main__':
    main()

 

  • 版本6.0:将文件操作封装到一个类中

代码:

 

'''
判断密码强弱
6.0
'''

class PasswordTool:
    '''
    密码工具类
    '''

    #定义类的属性
    def __init__(self,password):
        self.password = password
        self.strength_level = 0

    # 定义类的行为
    def process_password(self):
        # 规则1
        if len(self.password) >= 8:
            self.strength_level += 1
        else:
            print('密码位数至少为8位')
        # 规则2
        if self.check_number():
            self.strength_level += 1
        else:
            print('密码应该包含数字')
        # 规则3
        if self.check_letter():
            self.strength_level += 1
        else:
            print('密码应该包含字母')

    #类的方法
    def check_number(self):     #检查是否有数字
        has_number = False
        for c in self.password:
            if c.isnumeric():
                has_number = True
                break
        return has_number

    def check_letter(self):     #检查是否有字母
        has_letter = False
        for c in self.password:
            if c.isalpha():
                has_letter = True
                break
        return has_letter

class fileTool:
    '''
    文件工具类
    '''

    #定义属性
    def __init__(self,filepath):        #传入文件路径
        self.filepath = filepath        #传入文件路径

    #定义方法
    #1写操作
    def write_to_file(self,line):       #按行来写
        f = open(self.filepath,'a')
        f.write(line)
        f.close()

    #读操作
    def reade_from_file(self):
        f = open(self.filepath,'r')
        lines = f.readlines()
        f.close()
        return lines


def main():

    try_number = 5              #限制密码尝试次数
    filepath = 'password_6.0.txt'
    # 实例化文件工具对象
    file_tool = fileTool(filepath)

    while try_number > 0:
        pass_word = input('请输入密码:')

        #实例化密码工具对象
        password_tool = PasswordTool(pass_word)     #完成初始化
        password_tool.process_password()            #调用类

        # 写操作
        line = '密码是{},密码强度是{}\n'.format(pass_word,password_tool.strength_level)
        file_tool.write_to_file(line)

        if password_tool.strength_level == 3:
            print('密码合格')
            break
        else:
            print('密码不合格')
            try_number -= 1
    if try_number <= 0 :
        print('密码设置次数过多。')

    #读操作
    lines = file_tool.reade_from_file()
    print(lines)


if __name__ == '__main__':
    main()

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值