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中使用ConfigParser解析ini配置文件实例
Aug 30 Python
python中利用xml.dom模块解析xml的方法教程
May 24 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
Jun 07 Python
python爬虫获取京东手机图片的图文教程
Dec 29 Python
详解使用python绘制混淆矩阵(confusion_matrix)
Jul 14 Python
python爬虫 线程池创建并获取文件代码实例
Sep 28 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
python安装dlib库报错问题及解决方法
Mar 16 Python
增大python字体的方法步骤
Jul 05 Python
python 爬虫网页登陆的简单实现
Nov 30 Python
Python 实现二叉查找树的示例代码
Dec 21 Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 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
Ajax PHP分页演示
2007/01/02 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
php获取汉字首字母的函数
2013/11/07 PHP
PHP统计当前在线用户数实例讲解
2015/10/21 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
php转换上传word文件为PDF的方法【基于COM组件】
2019/06/10 PHP
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
JS实现的相册图片左右滚动完整实例
2016/11/23 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
vue增加强缓存和版本号的实现方法
2019/05/01 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
在Django框架中编写Context处理器的方法
2015/07/20 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
Python实现将Excel转换为json的方法示例
2017/08/05 Python
python 接口返回的json字符串实例
2018/03/27 Python
详解python while 函数及while和for的区别
2018/09/07 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
Pytorch的mean和std调查实例
2020/01/02 Python
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
医学类导师推荐信范文
2013/11/19 职场文书
校友会欢迎辞
2014/01/13 职场文书
七年级音乐教学反思
2014/01/26 职场文书
毕业生大学生活自我总结
2014/01/31 职场文书
遗体告别仪式主持词
2014/03/20 职场文书
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS