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 相关文章推荐
在Django中限制已登录用户的访问的方法
Jul 23 Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 Python
python+opencv实现动态物体追踪
Jan 09 Python
Python线性回归实战分析
Feb 01 Python
python 读取文件并把矩阵转成numpy的两种方法
Feb 12 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
Aug 02 Python
Pandas操作CSV文件的读写实现方法
Nov 13 Python
Python实现i人事自动打卡的示例代码
Jan 09 Python
使用python实现飞机大战游戏
Mar 23 Python
基于python 凸包问题的解决
Apr 16 Python
python实现密码验证合格程序的思路详解
Jun 01 Python
python使用numpy中的size()函数实例用法详解
Jan 29 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 过滤危险html代码
2009/06/29 PHP
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
Laravel 实现添加多语言提示信息
2019/10/25 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
Javascript Math对象
2009/08/13 Javascript
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列
2015/04/26 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
Vue.directive 实现元素scroll逻辑复用
2019/11/29 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
python连接oracle数据库实例
2014/10/17 Python
Python中取整的几种方法小结
2017/01/06 Python
Python中的上下文管理器和with语句的使用
2018/04/17 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
python 图像平移和旋转的实例
2019/01/10 Python
DJango的创建和使用详解(默认数据库sqlite3)
2019/11/18 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
Python如何给你的程序做性能测试
2020/07/29 Python
HTML5全屏(Fullscreen)API详细介绍
2015/04/24 HTML / CSS
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
群众路线自我剖析材料
2014/10/08 职场文书
2014年接待工作总结
2014/11/26 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
pytorch fine-tune 预训练的模型操作
2021/06/03 Python
详解SQL的窗口函数
2022/04/21 Oracle