day14

总结

哈希加密

  • 哈希加密(md5哈希算法中的一种)

    • 特点一:哈希算法生成的摘要不可逆.(不能通过密文来获取原文)
    • 特点二:只有相同的数据通过相同的算法得到的摘要才是一致的
    • 特点三:不管多大的数据产生的摘要长度一致
    • 特点二三可以用来验证数据的完整性,大的数据也可
  • 生成hash摘要

    • 通过算法创建hash对象:hashlib.算法名()
      算法名:md5,shaXXX

      hash = hashlib.md5()
      
    • 字符串转二进制:
      方法一
      bytes(字符串, encoding=“utf-8”)
      方法二
      字符串.encode()

    • 二进制转字符串
      方法一
      str(二进制, encoding=“utf-8”)
      方法二
      二进制.encode()

    • 添加数据
      hash对象.update(数据) 加密数据必须为为二进制数据,类型是bytes

      hash.update("sda1353".encode())
      
    • 获取摘要

      result = hash.hexdigest()
      print(result)
      

数据持久化

  • 程序中保存的数据默认都是保存在运行内存中的,在程序运行结束的时候都会被释放
    如果希望这次运行程序产生的数据在下一次运行的时候还能用,就需要将数据保存到硬盘中
    将数据保存到硬盘的过程就是数据持久化的过程
    硬盘保存的基本单元是文件,只要将数据保存到文件中就可以将数据保存到硬盘中
    程序中数据持久化常用文件类型:

    数据库文件(.db, .sqlite等), plist文件, json文件
    二进制文件(图片,视频,音频,exe可执行文件)

  • 文件操作 操作文件的内容
    文件操作基本流程: 打开文件 -> 操作文件(读,写) -> 关闭文件

    • 打开文件

      open(file, mode='r', *,encoding=None)  以指定方式打开指定文件,返回一个文件对象
      file 需要打开的文件在计算机中的位置信息(文件路径),字符串
           绝对路径:文件在计算机里面的全路径
           相对路径:(.表示当前目录,就是当前代码文件所在的文件夹)
                   (..表示当前目录的上层目录)
                   (...表示当前目录的上层目录的上层目录)
      
    • open(r"\QFLearn\时间日期格式化符号.PNG")
      

      mode 文件打开方式,决定打开文件后后续能对该文件进行的操作以及操作数据的类型
      第一组:“r”, “w”, “a” 控制操作数据的类型
      第二组:“t”, “b” 控制操作数据类型
      第一组必须选一个,第二组可以不选,不选默认是"t"
      “r” 只读
      “w” 只写,会清空原文件内容
      “a” 只写,会保留原文件内容

      ​ “t” 读操作返回的数据和写操作写入的数据是字符串(str)
      ​ “b” 读操作返回的数据和写操作写入的数据是二进制(bytes)
      ​ 注意:二进制文件打开的时候必须带b
      encoding 文本文件的编码方式(需要保证写入数据采用什么方式进行编码,读的时候就需要对应的方式解码)
      一般采用utf-8,但很多windows文本默认编码是gdk
      注意:只有以t的方式打开文本文件的时候才需要考虑给encoding赋值

    • 关闭文件 文件对象.close()

      f.close()
      
    • 操作结束后自动关闭
      with open(路径, mode=‘r’, *,encoding=None) as 文件对象:

    • 操作

      • 读操作
        文件对象.read() 从读写位置开始,读到文件结束.读写位置默认在文件开头
        文件对象.seek(0) 将读写位置移动到文件开头
        文件对象.readline() 从读写位置开始,读到一行结束,只能读文本文件
        文件对象.readline() 从读写位置开始,读到一行结束就是一个元素,放到一个列表里
      • 写操作
        文件对象.write()

作业

登录注册

import hashlib


def log_in():       # 登录
    name = input("请输入用户名:")
    s_password = input("请输入密码:")

    f = open("./date.py", "r", encoding="utf-8")
    f.seek(0)
    name_date = f.readline()
    while name_date:
        if name in eval(name_date):
            hansh = hashlib.md5()
            hansh.update(s_password.encode())
            password = hansh.hexdigest()
            if password == eval(name_date)[name]:
                print("登录成功")
                break
            else:
                print("登录失败,密码错误")
                break
        else:
            name_date = f.readline()
    if name_date:
        pass
    else:
        print("学生用户不存在")


def sign_in():      # 注册
    name = input("请输入用户名:")
    s_password = input("请输入密码:")
    add_stud = 1        # 保存判断值
    f = open("./date.py", "r", encoding="utf-8")
    f.seek(0)
    name_date = f.readline()
    while name_date:
        if name in eval(name_date):
            add_stud = 0
            print("学生用户存在")
            break
        else:
            name_date = f.readline()
    if add_stud:
        hansh = hashlib.md5()
        hansh.update(s_password.encode())
        password = hansh.hexdigest()
        n_p = {name: password}
        f = open("./date.py", "a", encoding="utf-8")
        f.write(f"{n_p}\n")
        print("添加成功")
    f.close()


def choise():
    while True:
        print("1.登录\n2.注册\n3.退出\n")
        n = input("请选择:")
        if int(n) == 1:     # 登录
            log_in()
            print("=================")
            continue
        elif int(n) == 2:       # 注册
            sign_in()
            print("=================")
            continue
        elif int(n) == 3:       # 退出
            break


choise()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值