#一、今日作业
# 1.把登录与注册的密码都换成密文形式
方式一:
import time
import hashlib
# 登录功能
all_user_dict = {}
#获取文件数据
def get_all_users():
with open('db.txt', 'r', encoding='utf-8') as f:
for line in f:
user, pwd, money = line.strip().split(':')
print('密码为:%s' %pwd)
all_user_dict[user] = [pwd, money]
#保存数据到文件
def savedate(username,password,money):
with open('db.txt', 'a+', encoding='utf-8') as f:
f.write(f'{username}:{password}:{money}\n')
# 注册功能
def register():
# 文件关闭后,相当于字典中有了所有的用户
dict = {}
while True:
username = input('请输入用户名: ').strip()
if username not in all_user_dict:
password = input('请输入密码: ').strip()
re_password = input('请输入密码: ').strip()
if password == re_password:
#两次密码都相同,则对密码进行加密处理
res=hashlib.md5(password.encode('utf-8'))
change_password = res.hexdigest()
print('加密密码为:%s' %change_password)
money = input('请输入注册金额:').strip()
if money.isdigit():
print(f'[{username}]注册成功,请先登录~')
savedate(username,change_password,money)
login()
else:
print('请输入数字类型')
else:
print('注册失败!')
else:
print('当前用户已存在,请重新输入!')
login_user = None
# 登录功能
def login():
get_all_users()
while True:
username = input('请输入用户名: ').strip()
if username not in all_user_dict:
print('用户不存在,请先注册')
register()
continue
count = 0
while count < 3:
password = input('请输入密码: ').strip()
res = hashlib.md5(password.encode('utf-8'))
change_password = res.hexdigest()
if change_password == all_user_dict.get(username)[0]:
global login_user
login_user = username
print('登录成功!')
count=3
else:
count += 1
print('输错%s次密码啦~')
if count == 3:
print("输错三次啦,5秒后再试")
count=0
time.sleep(0.5)
break
login()
方式二:
def get_pwd_md5(password):
# 1)先给密码加密成密文
md5_obj = hashlib.md5()
# 加盐
salt = '''
啊,tank真的好帅啊,不得了啦!!!救命啊!!!
'''
md5_obj.update(password.encode('utf-8'))
# 给盐加密
md5_obj.update(salt.encode('utf-8'))
md5_password = md5_obj.hexdigest()
return md5_password
# 注册
def register():
username = input('请输入用户名: ').strip()
password = input('请输入密码: ').strip()
re_password = input('请确认密码: ').strip()
if password == re_password:
# 1) 调用密码md5加密
md5_password = get_pwd_md5(password)
# 2)再组织用户数据并保存
user_dic = {
'username': username,
'password': md5_password,
'balance': 15000,
}
with open('user_db.json', 'w', encoding='utf-8') as f:
json.dump(user_dic, f)
# 登录
def login():
# 1)先讲user_db.json文件中的用户数据读取出来
with open('user_db.json', 'r', encoding='utf-8') as f:
user_dic = json.load(f)
'''
user_dic = {
'username': username,
'password': md5_password,
'balance': 15000,
}
'''
username = input('请输入用户名: ').strip()
# 2) 判断用户名是否正确
if username == user_dic.get('username'):
password = input('请输入密码: ').strip()
# 1) 调用密码md5加密
md5_password = get_pwd_md5(password)
# print(md5_password == '3bec35ad58b32d30886cb58c29347939')
# 判断用户输入的密码与文件中的密码是否一致
if md5_password == user_dic.get('password'):
print('登陆成功!')
print(f'用户{username} 余额{user_dic.get("balance")}')
register()
login()
# 2.文件完整性校验(考虑大文件)
def get_file_md5(file_path):
'''
:param file_path: 文件路径
:return:
'''
# 1.先通过os.path.getsize获取文件的大小(int类型)
file_size = os.path.getsize(file_path)
# 2)在文件的四个位置找点一个小点
# 2.1) 获取文件开头位置
offset1 = 0
# 2.2) 获取文件3分之1位置
offset2 = file_size // 3
# 2.3) 获取文件3分之2位置
offset3 = (file_size // 3) * 2
# 2.4) 获取文件最后位置
offset4 = file_size - 10
# get_data_list: 里面存放文件中4个位置的值,每个位置获取10个值
get_data_list = [offset1, offset2, offset3, offset4]
md5_obj = hashlib.md5()
with open(file_path, 'rb') as f:
# 循环4个位置
for offset in get_data_list:
# 光标移动到4个位置中
f.seek(offset)
# 读取10个bytes数据
read_data = f.read(10)
# 通过md5将4个位置截取的字符做一个MD5加密
md5_obj.update(read_data)
return md5_obj.hexdigest()
file_md5 = get_file_md5(r'/python相关/python_files/01 python班级/python14期/作业讲解/day22/作业.txt')
# cafbca8c94b05ec25a2d87907c8229b3
# 251a72bdd19716bf29bae98e6d51f0d4
print(file_md5)
# 3.注册功能改用json实现
def register2():
username = input('请输入用户名: ').strip()
password = input('请输入密码: ').strip()
re_password = input('请确认密码: ').strip()
if password == re_password:
user_dic = {
'username':username,
'password': password,
'money':150000,
}
with open('user_data.json', 'w', encoding='utf-8') as f:
json.dump(user_dic, f)
print('注册成功!')
else:
print('注册失败!')
register2()
# 4.项目的配置文件采用configparser进行解析
# 生成mysql配置信息
'''
conf_obj = configparser.ConfigParser()
# conf_obj['配置标题'] = {配置字典}
conf_obj['MYSQL'] = {'HOST': '127.0.0.1',
'PORT': '3306',
'USER': 'tank',
'PASSWORD': '123456',
}
with open('mysql.ini', 'w') as f:
conf_obj.write(f)
'''
# 校验mysql配置信息
conf_obj = configparser.ConfigParser()
# 读取mysql.ini配置文件
conf_obj.read('mysql.ini')
title = conf_obj.sections()
if 'MYSQL' in title:
ini_user = conf_obj['MYSQL']['USER']
ini_pwd = conf_obj['MYSQL']['PASSWORD']
if ini_user == 'tank' and ini_pwd == '123456':
print('mysql连接成功!')