zoukankan      html  css  js  c++  java
  • python作业1.1,编写登录模块

    实现功能:

      1、用户输入账户密码

      2、验证账户是否存在于黑名单,如果存在于黑名单,则执行1,否则往下执行

      3、验证用户名和密码。

        3.1、如果验证成功,则打印欢迎信息并退出程序;

        3.2、如果用户名存在,但是密码错误,则记录这个账户的错误次数(当前会话有效)

          3.2.1、如果错误次数等于等于3,则将这个用户写入锁定文件保存

      4、当错误次数(用户名存在但是密码错误 + 用户名不存在)大于等于3时,sleep(5),然后重置错误次数

     1 #!/usr/bin/env python3
     2 __author__ = 'DSOWASP'
     3 import getpass
     4 import time
     5 
     6 error_count = 0             #认证错误次数,包括用户名错误和用户名正确但是密码错误
     7 error_users = []            #用于存放用户名存在,但是密码错误的列表,存放数据格式如:
     8 # [{'name':'ds','count':1},{'name':owasp','count':2}],当某个用户的count为3时,就把这个
     9 # 用户加到locklist.txt文件中, 由于error_users保存在内存中,因此只有在当前会话有效
    10 
    11 flag1 = 0    #0表示用户名不存在,1表示用户名密码正确,2表示用户名正确,但是密码错误
    12 flag2 = 0    #0表示当前用户不存在与error_users中,1当前用户存在于error_users中或error为非空
    13 while True:
    14     username = input("用户名:").strip()
    15     password = input("密码:").strip()
    16     if username == "EXIT":                 #为了能正确退出程序而设置的
    17         break
    18     flag1 = 0
    19     with open('locklist.txt','r') as f_lock:   #验证此用户是否被锁定
    20         u1 = f_lock.read().split("\n")
    21         if u1.count(username) != 0:
    22             print("此账户已被锁定!请选择其他账户登录")
    23             time.sleep(1)
    24             continue
    25     with open('userlist.txt','r') as f_user:         #验证用户名和密码
    26         for line in f_user:
    27             user = line.split()[0]
    28             passwd = line.split()[1]
    29             if username == user:
    30                 if password == passwd:                  #用户和密码都正确,设置flag=1
    31                     print("Welcome to My Python Page!!!")
    32                     flag1 = 1
    33                     break
    34                 elif flag2 == 1:                       #密码不对,且当前error_users为非空
    35                     flag1 = 2                           #用户名正确,但是密码不对
    36                     for i in error_users:              #判断这个用户是否已存在于error_users中
    37                         # print("循环字典1",error_users)
    38                         if username == i.get("name"): #在error_users中找到了这个账户
    39                             # print("找到字典元素:",username,error_users)
    40                             flag2 = 1                  #当前用户存在于error_users中
    41                             i["count"] = i.get("count") + 1          #置当前用户的密码错误次数加1
    42                             if i.get("count") >= 3:                   #如果错误次数等于3
    43                                         with open('locklist.txt','a') as f_lock:         #就锁定这个账户
    44                                             f_lock.write("\n%s" % username)
    45                                             print("输入错误次数过多,%s账户已被锁定!请联系管理员!" %(username))
    46                             else:                     #如果错误次数小于3,则打印提示信息
    47                                 print("用户%s已输入错误密码%d次,此账户还剩%d次尝试机会" % (i.get("name") , i.get("count"),3 - i.get("count")))
    48                             break                     #如果再error_users中找到了当前的用户,则退出error_users的循环
    49                         else:                         #如果在error_users中没找到这个用户,则打印提示信息,并设置flag2=0
    50                             flag2 = 0
    51                 if flag2 == 0:                        #添加当前用户到error_users中。
    52                     flag1 = 2                         #用户名和密码都不正确
    53                     print("添加前字典情况",error_users)
    54                     error_users.append({'name':username,'count':1})
    55                     print("用户%s已输入错误密码1次,此账户还剩2次尝试机会" % (username))
    56                     print("添加%s用户到字典"%username)
    57                     print(error_users)
    58                     flag2 = 1                        #设置flag2=1表示error_users为非空
    59 
    60     if flag1 == 1:                                   #flag1=1表示用户名密码正确,则退出
    61         break
    62     elif flag1 == 0:                                 #flag=0表示用户名不存在斌,error_count加1
    63         error_count += 1
    64         print("用户名不存在,请重新输入,还剩%d次尝试机会" %(3 - error_count))
    65     elif flag1 == 2:                                 #flag1=2表示用户名正确但是密码错误.error_count 加1
    66         error_count += 1
    67     if error_count >= 3:                             #如果输错的此时大于等于3则打印提示信息,并sleep5秒,重置error_count
    68         print("输入错误次数超过3次,请5秒后重新输入")
    69         error_count = 0
    70         time.sleep(5)
  • 相关阅读:
    org.apache.catalina.LifecycleException: Protocol handler start failed
    达梦数据库修改表失败 错误号: -6407 错误消息: 锁超时
    mybatis sql语句配置大于号小于号的处理(元素内容必须由格式正确的字符数据或标记组成)
    Unity基础—Transform类
    Naocs 配置中心报错问题
    inux 设置开机自启动 文件配置开机自启动命令
    jar中配置文件读取外面的配置文件
    Unity 制作天空盒
    Maven 剔除已存在jar包
    Maven安装本地jar包到本地仓库
  • 原文地址:https://www.cnblogs.com/owasp/p/5373596.html
Copyright © 2011-2022 走看看