zoukankan      html  css  js  c++  java
  • 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连接成功!')
     
     
  • 相关阅读:
    记住一些英语谚语、格言或名人名言
    *英语词汇经济危机
    Windows XP Home Edition 中文版 安装IIS
    *英语词汇低碳
    14个优化网站性能提高网站访问速度技巧
    日全食 欧盟一体化 词汇
    英语词汇索马里海盗事件
    Ant实用脚本
    nginx配置数据结构及合并过程
    关于网页皮肤切换
  • 原文地址:https://www.cnblogs.com/dingbei/p/12608510.html
Copyright © 2011-2022 走看看