• 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
  • 相关阅读:
    神经网络 初步
    SVM整理
    碎碎念
    random note
    2015阿里实习内推一轮被拒
    django开发框架-view & template
    一点思考
    dive into python 读笔(3)
    dive into python 读笔(2)
    dive into python 读笔(1)
  • 原文地址:https://www.cnblogs.com/zhubincheng/p/12609144.html
Copyright © 2020-2023  润新知