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中各种方法的运作原理
Jun 15 Python
Python中的模块导入和读取键盘输入的方法
Oct 16 Python
Python实现的端口扫描功能示例
Apr 08 Python
python3.6的venv模块使用详解
Aug 01 Python
如何不用安装python就能在.NET里调用Python库
Jul 12 Python
Python基础之函数基本用法与进阶详解
Jan 02 Python
利用keras加载训练好的.H5文件,并实现预测图片
Jan 24 Python
Python 基于jwt实现认证机制流程解析
Jun 22 Python
python和go语言的区别是什么
Jul 20 Python
flask开启多线程的具体方法
Aug 02 Python
python 如何引入协程和原理分析
Nov 30 Python
Python基于Faker假数据构造库
Nov 30 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
解决File size limit exceeded 错误的方法
2013/06/14 PHP
简单实用的.net DataTable导出Execl
2013/10/28 PHP
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
浅析return false的正确使用
2013/11/04 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
JavaScript设计模式之工厂模式和构造器模式
2015/02/11 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
浅谈jquery上下滑动的注意事项
2016/10/13 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
vue mintui-Loadmore结合实现下拉刷新和上拉加载示例
2017/10/12 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
2019/05/06 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
Python logging模块写入中文出现乱码
2020/05/21 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
初婚未育证明
2014/01/15 职场文书
高中生活自我鉴定
2014/01/18 职场文书
初中生自我评价
2014/02/01 职场文书
交通事故案件代理词
2015/05/23 职场文书
责任书格式
2019/04/18 职场文书