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中的文件和目录操作实现代码
Mar 13 Python
Python自动登录126邮箱的方法
Jul 10 Python
Python中的defaultdict与__missing__()使用介绍
Feb 03 Python
Django权限机制实现代码详解
Feb 05 Python
python实现list由于numpy array的转换
Apr 04 Python
python爬虫超时的处理的实例
Dec 19 Python
Python整数对象实现原理详解
Jul 01 Python
pymysql模块的使用(增删改查)详解
Sep 09 Python
Ubuntu16.04安装python3.6.5步骤详解
Jan 10 Python
Python使用多进程运行含有任意个参数的函数
May 02 Python
Python如何实现大型数组运算(使用NumPy)
Jul 24 Python
jupyter notebook远程访问不了的问题解决方法
Jan 11 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执行速度全攻略(下)
2006/10/09 PHP
杏林同学录(二)
2006/10/09 PHP
php cc攻击代码与防范方法
2012/10/18 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
经典PHP加密解密函数Authcode()修复版代码
2015/04/05 PHP
PHP上传文件参考配置大文件上传
2015/12/16 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
php探针使用原理和技巧讲解
2019/09/17 PHP
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
2015/03/02 Javascript
JavaScript头像上传插件源码分享
2016/03/29 Javascript
js 自带的sort() 方法全面了解
2016/08/16 Javascript
JS瀑布流实现方法实例分析
2016/12/19 Javascript
ES6中Generator与异步操作实例分析
2017/03/31 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
Angular8 简单表单验证的实现示例
2020/06/03 Javascript
在Echarts图中给坐标轴加一个标识线markLine
2020/07/20 Javascript
Python异常处理操作实例详解
2018/05/10 Python
python 基本数据类型占用内存空间大小的实例
2018/06/12 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
2019/10/11 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
keras绘制acc和loss曲线图实例
2020/06/15 Python
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
春节晚会主持词
2014/03/24 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
2014年材料员工作总结
2014/11/19 职场文书
计算机专业自荐信范文
2015/03/26 职场文书
大学生活感想
2015/08/10 职场文书
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript