python实现密码强度校验


Posted in Python onMarch 18, 2020

本文实例为大家分享了python实现密码强度校验的具体代码,供大家参考,具体内容如下

一 校验规则

规则1 密码长度8位以上

规则2 密码需包含数字

规则3 密码需包含大小写字母

规则4 密码需包含特殊字符['+', '-', '*', '/', '_', '&', '%', ',']

规则5 校验5次不通过则强制退出

二 文件操作

每次输入的密码都会保存到文本文件中

以下是python的代码实现:

"""
  作者:zhengzhihui
  版本:7.0
  日期:2019/7/13
  功能:判断密码强度
  2.0功能:循环和终止
  3.0功能:将密码保存到文本中
  4.0功能:读取文件,遍历文件
  5.0功能:定义PasswordTool类
  6.0功能:定义FileTool类
  7.0功能:密码中增加大小写字母和特殊字符['+', '-', '*', '/', '_', '&', '%', ',']
"""
import time as tm
 
 
class FileTool():
  """
    文件工具类
  """
  def __init__(self, filepath):
    self.filepath = filepath
 
  def write_to_file(self, content):
    with open(self.filepath, 'a') as f:
      f.write(content)
 
  def read_from_file(self):
    with open(self.filepath, 'r') as f:
      content = f.readlines()
    return content
 
 
class PasswordTool():
  """
    密码工具类
  """
  def __init__(self, password):
    self.password = password
    self.strength_level = 0
 
  def check_number_exist(self):
    """
      判断是否含数字
    """
    has_number = False
    for c in self.password:
      if c.isnumeric():
        has_number = True
        break
    return has_number
 
  def check_letter_exist(self):
    """
      判断是否含字母
    """
    has_upper_letter = False
    has_lower_letter = False
    for c in self.password:
      if c.isupper():
        has_upper_letter = True
      elif c.islower():
        has_lower_letter = True
      has_both_letter = has_upper_letter and has_lower_letter
      if has_both_letter:
        break
    return has_both_letter
 
  def check_specialchar_exist(self):
    """
      判断是否包含特殊字符
    """
    has_specialchar = False
    specialchar_list = ['+', '-', '*', '/', '_', '&', '%', ',']
    for c in self.password:
      if c in specialchar_list:
        has_specialchar = True
        break
    return has_specialchar
 
  def process_password(self):
    """
      判断是否符合规则
    """
    # 规则1:长度至少8位
    if len(self.password) >= 8:
      self.strength_level += 1
    else:
      print('密码长度至少8位')
 
    # 规则2:必须包含数字
    if self.check_number_exist():
      self.strength_level += 1
    else:
      print('密码需要包含数字')
 
    # 规则3:必须包含大小写字母
    if self.check_letter_exist():
      self.strength_level += 1
    else:
      print('密码需要包含大小写字母')
 
    # 规则4:需要包含特殊字符
    if self.check_specialchar_exist():
      self.strength_level += 1
    else:
      print('密码需要包含至少一个特殊字符("+,-,*,/,_")')
 
 
def main():
  """
    主函数
  """
  try_times = 5
  pwd_strength_dict = {0: '弱', 1: '较弱', 2: '中', 3: '强', 4: '超强'}
  myfile = FileTool("password_7.0.txt")
 
  while try_times > 0:
    password = input('请输入密码: ')
    mypwdtool = PasswordTool(password)
    mypwdtool.process_password()
 
    now_time = tm.strftime("%Y-%m-%d %H:%M:%S", tm.localtime())
    myfile.write_to_file("日期:{} 密码:{} 强度:{}{}\n".format(now_time, password,
                          mypwdtool.strength_level, pwd_strength_dict[mypwdtool.strength_level]))
 
    if mypwdtool.strength_level >= 4:
      print('恭喜!密码合格')
      break
    else:
      print('密码不合格')
      try_times -= 1
      print()
  if try_times <= 0:
    print('尝试次数过多,密码设置失败!')
 
  content = myfile.read_from_file()
  print(content)
 
 
if __name__ == "__main__":
  main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的进程分支fork和exec详解
Apr 11 Python
python学习之第三方包安装方法(两种方法)
Jul 30 Python
5种Python单例模式的实现方式
Jan 14 Python
python里使用正则表达式的组嵌套实例详解
Oct 24 Python
python画一个玫瑰和一个爱心
Aug 18 Python
python中退出多层循环的方法
Nov 27 Python
关于python多重赋值的小问题
Apr 17 Python
Python 使用matplotlib模块模拟掷骰子
Aug 08 Python
python爬虫模块URL管理器模块用法解析
Feb 03 Python
python实现启动一个外部程序,并且不阻塞当前进程
Dec 05 Python
Django中使用Celery的方法步骤
Dec 07 Python
彻底解决pip下载pytorch慢的问题方法
Mar 01 Python
Python tcp传输代码实例解析
Mar 18 #Python
python实现用户名密码校验
Mar 18 #Python
Python3+selenium实现cookie免密登录的示例代码
Mar 18 #Python
Selenium启动Chrome时配置选项详解
Mar 18 #Python
python+selenium+Chrome options参数的使用
Mar 18 #Python
selenium WebDriverWait类等待机制的实现
Mar 18 #Python
Python socket处理client连接过程解析
Mar 18 #Python
You might like
PHP开发中常用的字符串操作函数
2011/02/08 PHP
PHP中多维数组的foreach遍历示例
2014/06/13 PHP
yii添删改查实例
2015/11/16 PHP
PHP获取页面执行时间的方法(推荐)
2016/12/10 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
javascript json2 使用方法
2010/03/16 Javascript
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
JS在IE下缺少标识符的错误
2014/07/23 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
jQuery实现定位滚动条位置
2016/08/05 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
vue+axios新手实践实现登陆的示例代码
2018/06/06 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
深入理解Python装饰器
2016/07/27 Python
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
波兰在线运动商店:YesSport
2020/07/23 全球购物
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
护士实习自我鉴定
2013/10/22 职场文书
法人代表委托书
2014/04/04 职场文书
关于环保的演讲稿
2014/05/10 职场文书
企业文化口号
2014/06/12 职场文书
忠诚教育心得体会
2014/09/03 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
Redis IP地址的绑定的实现
2021/05/08 Redis
浅谈Go语言多态的实现与interface使用
2021/06/16 Golang
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js
Java异常体系非正常停止和分类
2022/06/14 Java/Android