python基础学习-day23==课后作业练习(模块的使用)

#一、今日作业

# 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}
')

# 注册功能
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连接成功!')
 
 
原文地址:https://www.cnblogs.com/dingbei/p/12608510.html