Python 实现用户登录系统 案例 二(基于hashlib & sys & 对象序列化 [将用户名、密码信息序列化后保存到本地文件中 ])

Python 实现用户登录系统 案例 二(基于hashlib & sys & 对象序列化 [将用户名、密码信息序列化后保存到本地文件中 ])

import sys
import hashlib
import pickle

"""
    实现一个用户登录系统,用户可以输入用户面进行用户的注册、用户的登录、退出系统等操作。
    为了安全起见,引入hashlib中的MD5算法对用户密码进行明文加密。
"""


users = []
slat = "'zhangwanqiangR%BIYGGF#BUYybjuhunBYGBnnB)((*&&^%$$#$%Y(B~!~`'"

# 程序初始化
def pro_init():
    global users
    """" 初始化软件一些必须的数据 """
    # with open("users.data", "rb") as file:
    #     users = pickle.loads(file.read())
    users = pickle.load(open("users.data", "rb"))
    print(users)

# 将对象转换为字节
def save_users_info():
    save_users_data = pickle.dumps(users)
    with open("users.data", "wb") as file:
        file.write(save_users_data)
        print("对象保存完成")


def users_password_md5(user_password):
    user_password_md5 = hashlib.md5(user_password.encode("utf-8"))
    # 密码信息盐值混淆
    user_password_md5.update(slat.encode("utf-8"))
    return user_password_md5.hexdigest()

def main():
    print("~*" *25)
    print()
    print("\t\t\t\t\t用户登录系统")
    print()
    print("\t\t\t\t\t1、用户注册")
    print("\t\t\t\t\t2、用户登录")
    print("\t\t\t\t\t3、查询用户信息")
    print("\t\t\t\t\t4、退出系统")
    print()
    print("~*" * 25)

    user_chioce = input("请输入您的选择:")
    return user_chioce

def is_exist_user(username):
    for usr in users:
        if usr.get("username") == username:
            return True
    return False

def is_login(user_name, user_password):
    for i in users:
        if i.get("username") == user_name and i.get("userpassword") == user_password:
            return True
    return False


def register():
    user_name = input("请输入您的用户名:")
    user_password = input("请输入您的用户密码:")

    if user_name == None or user_name.strip() == "":
        print("对不起,用户名不能为空")
        return

    if user_password == None or user_password.strip() == "" or len(user_password) < 3:
        print("对不起,用户密码长度不能小于3位")
        return

    if is_exist_user(user_name):
        print("对不起,该用户已经存在,请重新输入!")
        return

    # 组件一个字典对象
    user = {}
    user["username"] = user_name
    user["userpassword"] = users_password_md5(user_password)
    print(user)
    # 将字典追加进列表
    users.append(user)
    # 将用户信息持久化下来
    save_users_info()
    print("用户信息保存完成")

def login():
    user_name = input("请输入您的用户名:")
    user_password = input("请输入您的用户密码:")
    # 对用户输入的密码进行DM5加密
    user_password = users_password_md5(user_password)
    if is_login(user_name, user_password):
        print("恭喜您登录成功")
    else:
        print("对不起,您输入的用户名、密码有误!!!")
        print("请您重新登录!")


pro_init()

while True:
    chioce = main()
    if chioce == "1":
        print("用户注册")
        register()
    elif chioce == "2":
        print("用户登录")
        login()
    elif chioce == "3":
        print(users)
    elif chioce == "4":
        print("退出系统")
        sys.exit(0)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值