3.31---登录注册密文及json格式存储、大文件完整性校验练习

一、登录与注册

1、把登录与注册的密码都换成密文形式
2、注册功能改用json实现

 

import hashlib
import json
def login():
    name = input("请输入账号:")
    with open("db.json",mode="rb") as f:

        # 读出json中数据,转换成相应的数据类型
        user_dict = json.load(f)
        print(user_dict)
        if name in user_dict:
            password = input("请输入密码:")
            m = hashlib.md5(password.encode("utf-8"))
            # 加盐,防止撞库
            m.update("你妹哟".encode("utf-8"))
            pwd_res = m.hexdigest()
            print(pwd_res)

            if user_dict.get(name) == pwd_res:
                print("登陆成功!")
            else:
                print("密码错误,请重新登录!")
        else:
            print("账号不存在")

def register():
    while True:
        name = input("请注册账号:")
        with open("db.json",mode = "rb") as f:
            user_dict = json.load(f)
            if name in user_dict:
                print("用户名已存在,请重新输入!")
                continue
            while True:
                password_1 = input("请输入密码:")
                password_2 = input("请确认密码:")
                if password_1 != password_2:
                    print("两次密码不一致,请重新输入!")
                    continue
                with open("db.json",mode="wt",encoding="utf-8") as f:
                    m = hashlib.md5(password_1.encode("utf-8"))
                    m.update("你妹哟".encode("utf-8"))
                    res = m.hexdigest()
                    print(res)
                    user_dict[name] = res
                    json.dump(user_dict,f)
                    print(f"恭喜[{name}]注册成功!")
                    return
            # 以wb形式写入json格式
            # wb模式下,不可直接使用 json.dump(user_dict,f),其内部会将user_dict转换成str再写入
            # 而此时是 wb 模式 不可写入str类型,故报错
                # with open("db.json",mode="wb") as f:
                #     m = hashlib.md5(password_1.encode("utf-8"))
                #     m.update("你妹哟".encode("utf-8"))
                #     res = m.hexdigest()
                #     print(res)
                #     user_dict[name] = res
                #
            # 先转换成json格式的str,然后再对其编码成utf-8,存入文件f
            # 不建议这么写,因为写入格式一旦出错,就无法再次被读取了。
                #     dic_json = json.dumps(user_dict)
                #     f.write(dic_json.encode("utf-8"))
                #     print(f"恭喜[{name}]注册成功!")
                #     return

 

# 法二:用户信息存成多行,存在一定的问题。不规范,不建议这么存储
def login():
    name = input("请输入账号:")
    with open("db_lines.json",mode="rb") as f:
        for line in f:
            # line = line.decode("utf-8")
            user_dict = json.loads(line)
            print(user_dict)
            if name in user_dict:
                password = input("请输入密码:")
                if user_dict.get(name) == int(password):
                    print("登陆成功!")
                    break
                else:
                    print("密码错误,请重新登录!")
        else:
            print("用户名不存在")

 

二、大文件校验

使用哈希值对比校验的方法,来验证完整性

# 验证文件完整性,传入文件大小,在八处取数据进行md5哈希计算,得到哈希值。
def check(size):
    with open("test.ini",mode="rb") as f:
        m = hashlib.md5()
        content = f.readline()
        point = 0
        while point < size:
            m.update(content)
            point += size//8
            f.seek(point,0)
    code = m.hexdigest()
    return code

print(check(864))

 

三、项目配置文件采用configparser进行解析

import configparser

config=configparser.ConfigParser()
config.read('test.ini')             # ini 格式可区分语法,read什么格式都可以,重要的是里面的数据

# 1、获取sections
print(config.sections())

# 2、获取某一section下的所有options
print(config.options('section1'))

# 3、获取items
print(config.items('section1'))

# 4、
res=config.get('section1','user')
print(res,type(res))

res=config.getint('section1','age')
print(res,type(res))


res=config.getboolean('section1','is_admin')
print(res,type(res))


res=config.getfloat('section1','salary')
print(res,type(res))
# 注释1
; 注释2

[section1]
k1 = v1
k2:v2
user=egon
age=18
is_admin=true
salary=31

[section2]
k1 = v1

 

posted @ 2020-03-31 22:27  Jil-Menzerna  阅读(369)  评论(0)    收藏  举报