题目:写一个用户登录验证程序,文件如下
1234.json
{"expire_date": "2021-01-01", "id": 1234, "status": 0, "pay_day": 22, "password": "abc"}
- 用户名为json文件名,密码为 password。
- 判断是否过期,与expire_date进行对比。
- 登陆成功后,打印“登陆成功”,三次登陆失败,status值改为1,并且锁定账号。
- 三次验证的密码进行hashlib加密处理。即:json文件保存为md5的值,然后用md5的值进行验证。
import json
import time
import hashlib
def compare(a, b, *args):
global count
if a < b:
verification(password, pin, count)
elif a > b:
print('expire!')
def verification(a, b, c):
global count
global login
if a == b:
print('登录成功!')
login = 1
elif count != b:
count += 1
f = open('jersey_001.json', 'r')
load_dict = json.load(f) # 获取的是json文件里的字典类
password = load_dict.get('password')
hash_md5 = hashlib.md5(password.encode('utf-8'))
new_password = hash_md5.hexdigest()
date = load_dict.get('expire_date')
ex_year = date[0:4]
ex_mon = date[5:7]
ex_day = date[8:]
today = time.strftime("%Y-%m-%d", time.localtime()) # type:str
year = today[0:4]
mon = today[5:7]
day = today[8:]
count = 1
login = 0
while load_dict.get('status') == 0 and login == 0:
if count < 4:
pin = input('please input your password:')
compare(year, ex_year, password, pin, count) # 年份比较是否过期,如果年份相等,则不会满足此函数,进入下面的if条件判断:
if year == ex_year:
compare(mon, ex_mon, password, pin, count)
if mon == ex_mon:
compare(day, ex_day, password, pin, count)
if day == ex_day:
print('expire!')
break
elif count >= 4:
print('登录失败!')
load_dict['status'] = 1
load_dict['password'] = new_password
# 将status改为了1,password改为md5格式
with open('jersey_001.json', 'w') as f_w:
json.dump(load_dict, f_w)
# 退出循环,退出文件——当下一次进入文件的时候直接进入 status=1,然后以md5进行比较密码
f_w.close()
if load_dict.get('status') == 1:
pin_1 = input('请输入密码的md5值进行验证:')
# 将输入的密码改为md5格式,然后和文件中的密码md5格式进行比较
if pin_1 == new_password:
print('登录成功!')
else:
print('登录失败!')