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用fork来创建子进程注意事项
Jul 03 Python
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
python下10个简单实例代码
Nov 15 Python
matlab中实现矩阵删除一行或一列的方法
Apr 04 Python
python3利用Socket实现通信的方法示例
May 06 Python
详解基于python的多张不同宽高图片拼接成大图
Sep 26 Python
keras 实现轻量级网络ShuffleNet教程
Jun 19 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
Jun 28 Python
python如何爬取网页中的文字
Jul 28 Python
Python 实现国产SM3加密算法的示例代码
Sep 21 Python
Python使用BeautifulSoup4修改网页内容
May 20 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
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
js客户端快捷键管理类的较完整实现和应用
2010/06/08 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
2013/12/04 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
Bootstrap选项卡与Masonry插件的完美结合
2016/07/06 Javascript
Node.js如何自动审核团队的代码
2016/07/20 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
微信小程序利用co处理异步流程的方法教程
2017/05/20 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
2017/08/23 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
Echarts之悬浮框中的数据排序问题
2018/11/08 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
Vue实现返回顶部按钮实例代码
2020/10/21 Javascript
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
2016/06/07 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
物流管理专业职业生涯规划书
2014/01/06 职场文书
2015年仓库工作总结
2015/04/09 职场文书
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL
Go语言 详解net的tcp服务
2022/04/14 Golang