首页 > 其他分享 >time 和 hashlib模块

time 和 hashlib模块

时间:2023-12-21 10:35:28浏览次数:27  
标签:hashlib 加密 random 模块 time password data md5

【一】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())
    

标签:hashlib,加密,random,模块,time,password,data,md5
From: https://www.cnblogs.com/banchengyanyu/p/17918423.html

相关文章

  • Timestamp
    概述Athinwrapperaround<code>java.util.Date</code>thatallowstheJDBCAPItoidentifythisasanSQL<code>TIMESTAMP</code>value.ItaddstheabilitytoholdtheSQL<code>TIMESTAMP</code>fractionalsecondsvalue,......
  • 【业务安全实战演练】密码找回模块测试08
    一、验证码客户端回显测试典型场景:任意用户登录使用验证码的场景:人机验证:防止机器操作,爆破表单。唯一凭据:唯一性判断,任意账户登录。​找回密码测试中要注意验证码是否会回显在响应中,有些网站程序会选择将验证码回显在响应中,来判断用户输入的验证码是否和响应中的......
  • Oracle12c新增max_idle_time参数的学习与感触
    Oracle12c新增max_idle_time参数的学习与感触TLDR其实任何软件出了新版本.readme是很重要的.尤其是数据库,涉及到底层问题的.比如这次遇到的Oracle的max_idle_time参数,以及前几天遇到的Mysql的新增的parallel关键字.自己之前的积累可能是一盏明灯,也可能是一堵墙.......
  • 初中英语优秀范文100篇-033My Free Time-我的业余时间
    PDF格式公众号回复关键字:SHCZFW033记忆树1Ihavealotofthingstodoinmyfreetime.翻译我有很多空闲时间要做的事情。简化记忆事情句子结构主语(I):表示句子中的主体,即说话者本人。谓语(have):表示主体所进行的动作或状态,这里是“有”的意思。宾语(alotofthing......
  • OS模块和JSON模块
    OS模块和JSON模块【一】OS模块【二】JSON模块【1】序列化与反序列化序列化和反序列化是计算机科学中数据处理中的两个过程,用于将数据从一种格式转换为另一种格式。这两个过程通常称为编码和解码。序列化是将数据结构或对象转换为字节序列的过程,使得数据可以以一种易于传输......
  • ATM2.0模块版
    ATM项目开发(1)在主程序文件中创建程序入口(2)在核心代码文件(视图层)搭建程序框架(3)进行代码功能分配-ATM项目根目录-README.md项目说明书-start.py项目启动文件的创建方式二,直接暴露在最外层-conf配置文件-settings.py-lib公共方法文件......
  • python之常用模块
    【time/datetime】(时间模式转换)    【datetime】 【os模块】  【random模块】 【json模块:序列化与反序列化】  案例  【subprocess模块】  【hash模块】 案例 【sys模块】 ......
  • TimeZone
    概述<code>TimeZone</code>representsatimezoneoffset,andalsofiguresoutdaylightsavings.Typically,yougeta<code>TimeZone</code>using<code>getDefault</code>whichcreatesa<code>TimeZone</code>b......
  • datetime模块
    datetime模块(1)导入模块importdatetime(2)自定义日期并格式化datetime.date()自定义日期并格式化##2.自定义日期并格式化#res=datetime.date(2023,8,18)#print(res)##2023-08-18(3)获取本地时间datetime.date.today()获取年月日##(1)年月日#now_date=datetime.......
  • Derivative norm vector repect to time 《PBM by Pixar》 Appendix D.2 code
    目录1Derivativenormalvectorrepecttotime1.1DerivativevectornormrepecttotimeXRefVectorCalculus1DerivativenormalvectorrepecttotimeLet'sdenotetheunitnormalvectoras:\[\mathbf{n}=\frac{\mathbf{e}_a\times\mathbf{e}_b}{......