一、登录与注册
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