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中的startswith和endswith函数使用实例
Aug 25 Python
Python2.7简单连接与操作MySQL的方法
Apr 27 Python
Ubuntu下创建虚拟独立的Python环境全过程
Feb 10 Python
教大家玩转Python字符串处理的七种技巧
Mar 31 Python
Python Django 添加首页尾页上一页下一页代码实例
Aug 21 Python
使用python切片实现二维数组复制示例
Nov 26 Python
Python chardet库识别编码原理解析
Feb 18 Python
Windows 下python3.8环境安装教程图文详解
Mar 11 Python
基于Python爬取51cto博客页面信息过程解析
Aug 25 Python
python 密码学示例——理解哈希(Hash)算法
Sep 21 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 20 Python
python3 实现mysql数据库连接池的示例代码
Apr 17 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.MVC的模板标签系统(五)
2006/09/05 PHP
IStream与TStream之间的相互转换
2008/08/01 PHP
浅析十款PHP开发框架的对比
2013/07/05 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
IE中的File域无法清空使用jQuery重设File域
2014/04/24 Javascript
JavaScript中textRange对象使用方法小结
2015/03/24 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
10个经典的网页鼠标特效代码
2018/01/09 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
Python中声明只包含一个元素的元组数据方法
2014/08/25 Python
django用户登录验证的完整示例代码
2019/07/21 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
8种常用的Python工具
2020/08/05 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
同学聚会主持词
2014/03/18 职场文书
党员公开承诺践诺书
2014/03/25 职场文书
考核工作实施方案
2014/03/30 职场文书
5s推行计划书
2014/05/06 职场文书
毕业证丢失证明范本
2014/09/20 职场文书
公司借条范本
2015/05/25 职场文书
读书笔记怎么写
2015/07/01 职场文书
2015年中秋寄语
2015/07/31 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
react国际化react-intl的使用
2021/05/06 Javascript