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获取文件版本信息、公司名和产品名的方法
Oct 05 Python
Python之PyUnit单元测试实例
Oct 11 Python
Python Web框架Flask中使用百度云存储BCS实例
Feb 08 Python
分享python数据统计的一些小技巧
Jul 21 Python
Python利用matplotlib生成图片背景及图例透明的效果
Apr 27 Python
利用Python的turtle库绘制玫瑰教程
Nov 23 Python
python将四元数变换为旋转矩阵的实例
Dec 04 Python
如何通过python实现全排列
Feb 11 Python
Python如何使用bokeh包和geojson数据绘制地图
Mar 21 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
May 20 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 Python
python基础入门之普通操作与函数(三)
Jun 13 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
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
PHP计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
解决laravel 表单提交-POST 异常的问题
2019/10/15 PHP
基于jQuery实现点击同时更改两个iframe的网址
2010/07/01 Javascript
js判断为空Null与字符串为空简写方法
2014/02/24 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
Jquery Datatables的使用详解
2020/01/30 jQuery
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
python去除拼音声调字母,替换为字母的方法
2018/11/28 Python
Python3利用print输出带颜色的彩色字体示例代码
2019/04/08 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
详解Python传入参数的几种方法
2019/05/16 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
Windows系统Python直接调用C++ DLL的方法
2019/08/01 Python
Python实现七个基本算法的实例代码
2020/10/08 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
东方电视购物:东方CJ
2016/10/12 全球购物
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
大学生职业生涯规划书范文
2014/01/14 职场文书
医务人员自我评价
2014/01/26 职场文书
八年级数学教学反思
2014/01/31 职场文书
少先队学雷锋活动月总结
2014/03/09 职场文书
2019年亲子运动会口号
2019/10/11 职场文书
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL