time 和 hashlib模块

发布时间 2023-12-21 10:30:48作者: -半城烟雨

【一】time 模块

【1】时间戳

import time
print(time.time())
#1703122154.8660362

【2】时间元组

本地时间
print(time.localtime(time.time()))
#time.struct_time(tm_year=2023, tm_mon=12, tm_mday=21, tm_hour=9, tm_min=30, tm_sec=38, tm_wday=3, tm_yday=355, tm_isdst=0)
国际时间
print(time.gmtime(time.time()))

【3】格式化输出时间

print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))

【二】hashlib 模块

  • hashlib是一个摘要算法模块,不是加密模块
  • 摘要算法只能单向加密,不能反向解密
# 导入hashlib模块
import hashlib
# 定义密码
password='123456'
# 创建md5对象
md5=hashlib.md5()
# 更新密码
md5.update(password.encode('utf-8'))
# 打印16进制摘要
print(md5.hexdigest())
# 打印摘要
print(md5.digest())
#e10adc3949ba59abbe56e057f20f883e
#b'\xe1\n\xdc9I\xbaY\xab\xbeV\xe0W\xf2\x0f\x88>'
  • 通过加盐提高md5加密的安全性

    def encry_password(data, salt):
    #     '''
    #     :param data: 原始数据
    #     :param salt: 加的盐
    #     :return: 返回了加密后的十六进制的加密串
    #     '''
    #     # (1)需要加密的数据 = 原始数据 + 盐
         data = data + salt
    #     # (2)转成二进制数据
         data = data.encode('utf8')
    #     # (3)创建MD5对象
         md5 = hashlib.md5()
    #     # (4)将二进制数据扔到MD5对象中进行加密
         md5.update(data)  # 这里可以将数据作为一个整体(二进制数据)进行加密,也可以分批,分成几个部分进行加密
    #     # (5)取出加密后的加密串
         return md5.hexdigest()
    
  • 登录注册加密使用案例

    import hashlib
    import json
    import random
    
    
    def get_verify_code(n):
        code = ''
        for i in range(n):
            random_int = str(random.randint(0, 9))  # 0-9之间的整数
            random_upper = chr(random.randint(65, 90))  # A-Z之间的字母
            random_lower = chr(random.randint(97, 122))  # a-z之间的字母
            temp = random.choice([random_int, random_upper, random_lower])
            code += temp
        return code
    
    
    
    def encry_password(data, salt):
    #     '''
    #     :param data: 原始数据
    #     :param salt: 加的盐
    #     :return: 返回了加密后的十六进制的加密串
    #     '''
    #     # (1)需要加密的数据 = 原始数据 + 盐
         data = data + salt
    #     # (2)转成二进制数据
         data = data.encode('utf8')
    #     # (3)创建MD5对象
         md5 = hashlib.md5()
    #     # (4)将二进制数据扔到MD5对象中进行加密
         md5.update(data)  # 这里可以将数据作为一个整体(二进制数据)进行加密,也可以分批,分成几个部分进行加密
    #     # (5)取出加密后的加密串
         return md5.hexdigest()
    def save_data(path,data):
        with open(path,'a',encoding='utf8') as fp:
            json.dump(data,fp,ensure_ascii=False)
    def register():
        username=input("请输入用户名:").strip()
        password=input("请输入密码:").strip()
        code=get_verify_code(6)
        print(code)
        check_password=input("请输入验证码:").strip()
        print(check_password.upper())
        if code.upper()!=check_password.upper():
            return False,f'注册失败验证码错误'
        salt=get_verify_code(4)
        password=encry_password(password,salt)
        password+=salt
        user_data={username:{"username":username,"password":password}}
        save_data("user.json",user_data)
    
        return True, f'注册成功'
    # register()
    def read_data():
        with open("user.json","r",encoding="utf8") as fp:
            data=json.load(fp)
        return data
    
    def login():
        username = input("请输入用户名:")
        password = input("请输入密码:")
        data=read_data()
        if username not in data:
            return False, f'用户名错误请重新输入'
        user_password=read_data()[username]['password']
        salt=user_password[-4:]
        old_password=user_password[:-4]
        check_pasword=encry_password(password,salt)
        if old_password.upper()!=check_pasword.upper():
            return False,f'登陆失败!'
        return True,f'登陆成功!'
    print(login())