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中的split()函数的使用方法
Apr 07 Python
python编写爬虫小程序
May 14 Python
Python os模块学习笔记
Jun 21 Python
Python中常见的数据类型小结
Aug 29 Python
python解析html提取数据,并生成word文档实例解析
Jan 22 Python
安装python3的时候就是输入python3死活没有反应的解决方法
Jan 24 Python
Python带动态参数功能的sqlite工具类
May 26 Python
Python绘制堆叠柱状图的实例
Jul 09 Python
用Python获取摄像头并实时控制人脸的实现示例
Jul 11 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
Feb 28 Python
详解Pytorch显存动态分配规律探索
Nov 17 Python
python数据分析之用sklearn预测糖尿病
Apr 22 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下SSL加密解密、验证、签名方法(很简单)
2020/06/28 PHP
PHP文件与目录操作示例
2016/12/24 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
Avengerls vs KG BO3 第二场2.18
2021/03/10 DOTA
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
jQuery基于$.ajax设置移动端click超时处理方法
2016/05/14 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
python八皇后问题的解决方法
2018/09/27 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
2019/08/05 Python
Python 实现一个手机号码获取妹子名字的功能
2019/09/25 Python
Django框架中间件定义与使用方法案例分析
2019/11/28 Python
Python 多进程原理及实现
2020/12/21 Python
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
俄语地区最大的中国商品在线购物网站之一:Umka Mall
2019/11/03 全球购物
物流合作计划书
2014/01/10 职场文书
小学生自我评价范文
2014/01/25 职场文书
保险经纪人求职信
2014/03/11 职场文书
小学生春游活动方案
2014/08/20 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书