python-homework 用户的登录和注册

106 阅读1分钟

实现基本的用户注册和登录功能,密码采用sha256的哈希算法加密,使用了盐值与密码拼接后再进行哈希处理的方式。

import sys
import hashlib
import secrets

# 存储所有用户的字典
users = {}

# 密码哈希函数,生成随机盐值
def password_hash(password):
    salt = secrets.token_hex(16)
    hashed = hashlib.sha256((salt + password).encode()).hexdigest()
    return salt, hashed

# 验证密码是否正确
def validate_password(password, salt, hashed):
    return hashed == hashlib.sha256((salt + password).encode()).hexdigest()

# 注册
def register():
    username = input("请输入用户名:")
    password = input("请输入密码:")
    
    if not username or not username.strip():
        print("用户名不能为空")
        return
    
    if not password or not password.strip() or len(password) < 6:
        print("密码长度不能少于6位")
        return
    
    if username in users:
        print("该用户名已经被注册,请重新输入")
        return
    
    # 对密码进行哈希处理
    salt, hashed = password_hash(password)
    
    # 将用户信息保存到字典中 {username: {'salt': salt, 'hashed': hashed}}
    user = {'salt': salt, 'hashed': hashed}
    users[username] = user
    print("用户注册成功")

# 登录
def login():
    username = input("请输入用户名:")
    password = input("请输入密码:")
    
    user = users.get(username)
    if not user:
        print("该用户不存在,请重新输入")
        return
    
    if validate_password(password, user['salt'], user['hashed']):
        print("用户登录成功")
    else:
        print("密码错误,请重新输入")

def main():
    print("~*" * 20)
    print("\t\t 1.用户注册")
    print("\t\t 2.用户登录")
    print("\t\t 3.退出系统")
    print("~*" * 20)
    choice = input("请输入您要操作的选项:")
    return choice

if __name__ == '__main__':
    while True:
        choice = main()
        if choice == "1":
            print("用户注册")
            register()
        elif choice == "2":
            print("用户登录")
            login()
        else:
            print("退出系统")
            sys.exit()

运行结果:

image.png