python练习-基于文件存储的用户登录程序(3次登录失败,锁定用户)

#!/usr/bin/python
# -*- coding:utf-8 -*-
# import getpass  python IDE中无法显示密码
import hashlib

f1 = open('db','r')
f2 = f1.read()
f1.close()
user_info_list= []
user_str_list = []
#使用MD5算法给密码加密
def a_md5(password):
    md5 = hashlib.md5()
    md5.update(password.encode())
    passwd = md5.hexdigest()
    return passwd

def b_md5():
    password = input("请再次输入您的密码:")
    md5 = hashlib.md5()
    md5.update(password.encode())
    password = md5.hexdigest()
    return password
#MD5加盐
def jy1_md5(password):
    passwd = a_md5(password + 'the-Salt')
    return passwd



#定义注册
def ZhuCe():
  #  option == '2'
    Registered_users = input("请输入您要注册的用户:")
    for item in user_info_list:
        if Registered_users in item["name"]:
            print('该用户已经被注册,请重新注册或直接登陆:!')
            break

    else:
        passwd = input("请输入您的密码:")
        a = a_md5(passwd)
        b = b_md5()
        jy = jy1_md5(passwd)
        if a == b:
            pass
        else:
            print("您输入的密码不一致,请重新输入:")
            exit()
        v2 = {
            "name":Registered_users,
            "passwd":jy,
            "times":0
        }

        user_info_list.append(v2)
        print('恭喜您注册成功!!!')


#写入db
def write():
    for item2 in user_info_list:
        user_last = "%s|%s|%s" % (item2["name"], item2["passwd"], item2["times"])
        user_str_list.append(user_last)

    b = "\n".join(user_str_list)
    file = open('db', 'w')
    file2 = file.write(b)
    file.close()


#####
if len(f2) != 0:
    for i in f2.split("\n"):
        a=i.split("|")
    #    print(i,a)
        v = {
            "name":a[0],
            "passwd":a[1],
            "times":a[2]
        }
    #    print(v)
        user_info_list.append(v)
#    print(user_info_list)
    times = 0
    while True:
        option = input("登陆输入1,注册输入2,退出输入q:")
        if option == '1':
            user = input("输入用户名:")
            for item in user_info_list:
     #           print(item)
                if user in item["name"]:
    #               print(item["name"])
                    for i, j in enumerate(user_info_list):
                        if user == j["name"]:
        #                    print(j["times"])

                            if j["times"] == '3':
                                print("您的用户已被锁定!")
                                exit()
                            else:
                                while times < 3:
                                    passwd = input("输入密码:")
                                    p = a_md5(passwd + 'the-Salt')
     #                               print(p)
                                    if user == item["name"] and p == item["passwd"]:
                                        print("登陆成功")
                                        exit() #或用break
                                    times += 1

                                else:
                                    j["times"] = "3"

                                    user_info_list[i]=j

                                    print("您的用户已锁定,请联系管理员")
                                    write()

                                    exit()

            else:
                print("没有您的信息,请注册!")
        elif option == '2':
            ZhuCe()
        elif option == 'q':
            print("您以退出!")
            break

else:
    ZhuCe()

write()
#密码密文显示:python IDE中不支持
import getpass
password=getpass.getpass("input password")

转载于:https://www.cnblogs.com/ma-ke/p/6867253.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值