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 18 Python
django+js+ajax实现刷新页面的方法
May 22 Python
python3 模拟登录v2ex实例讲解
Jul 13 Python
python编写Logistic逻辑回归
Dec 30 Python
python中format()函数的简单使用教程
Mar 14 Python
Python基于property实现类的特性操作示例
Jun 15 Python
Python collections模块的使用方法
Oct 09 Python
安装pyinstaller遇到的各种问题(小结)
Nov 20 Python
python中yield的用法详解
Jan 13 Python
python实现网络五子棋
Apr 11 Python
Python编程super应用场景及示例解析
Oct 05 Python
基于Python实现流星雨效果的绘制
Mar 18 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 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
JavaScript数据类型判定的总结笔记
2015/07/31 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
Python实时获取cmd的输出
2015/12/13 Python
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
python算法题 链表反转详解
2019/07/02 Python
Python数学形态学实例分析
2019/09/06 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
Python爬虫如何应对Cloudflare邮箱加密
2020/06/24 Python
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
英国著名书店:Foyles
2018/12/01 全球购物
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
环境科学专业研究生求职信
2013/10/02 职场文书
十八届三中全会感言
2014/03/10 职场文书
学校标语大全
2014/06/19 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
营销与策划实训报告
2014/11/05 职场文书
亲属关系公证书样本
2015/01/23 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python