zoukankan      html  css  js  c++  java
  • python里面的MD5加密 ---# hashlib包的使用

    在应用程序的接口里,常用到签名:其中签名里用到MD5加密,这里用hashlib实现

    hashlib

    概念:Hash,译做“散列”,也有直接音译为“哈希”的。把任意长度的输入,通过某种hash算法,变换成固定长度的输出,

    该输出就是散列值,也称摘要值。该算法就是哈希函数,也称摘要函数。

    hashlib模块支持md5(),sha1(), sha224(), sha256(), sha384(), sha512(), blake2b(),blake2s(),

    sha3_224(), sha3_256(), sha3_384(), sha3_512(), shake_128(), shake_256()等多种hash构造方法。

    这些构造方法在使用上通用,返回带有同样接口的hash对象,对算法的选择,差别只在于构造方法的选择。

    例如sha1()能创建一个SHA-1对象,sha256()能创建一个SHA-256对象。

    然后就可以使用通用的update()方法将bytes类型的数据添加到对象里,

    最后通过digest()或者hexdigest()方法获得当前的摘要。

    import hashlib
    import time
    
    def mymd5(pw):
        md = hashlib.md5()  # 生成md5对像
        md.update(pw.encode('utf-8'))  # 加密,加密密码的时候,必须对密码进行编码,否则会报错
        print("old—value:",pw)            #用十六进制输出加密后的数据
        print ("md5-value:",md.hexdigest())
        
    t = time.time()
    code="iuehf3"+"jknshfemckfhskdf"+str(int(round(t * 1000)))+"baidu"
    mymd5(code)

    MD5双重加密:

    md5_obj=hashlib.md5("123456".encode("utf-8"))
    str1=md5_obj.hexdigest() #加密1次
    obj2=hashlib.md5(str1.encode("utf-8"))
    str2=obj2.hexdigest()#加密2次
    print(str2) #双重加密后,同样解密开

    MD5加盐值(SALT)

    各大网站的暴力破解,都需要再一次提高MD5的安全性。所谓加盐就是加一些辅助的调料,这里称为Salt值。
    举个栗子,比如用户注册的密码,肯定不能明文存数据库,当然现在肯定不会再出现CSDN这种事情了,那密码加密之前是单纯的使用MD5,

    现在要给MD5加点调料,那问题是最终MD5不可逆,用户注册后第二次怎么登陆?

    数据库在存储的时候需要在表里面多加一个Salt字段,用来存储你加的调料是什么,等用户登录的时候,拿用户注册的密码+Salt字段,然后再进行MD5,然后再用加密后的内容和数据库存储的MD5密码进行匹配,成功的话则提示成功,匹配失败的话就登录失败。

    from random import Random  
    import hashlib
      
    # 获取由4位随机大小写字母、数字组成的salt值  
    def create_salt(length = 4):  
        salt = ''  
        chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'  
        len_chars = len(chars) - 1  
        random = Random()  
        for i in range(length):  
            # 每次从chars中随机取一位  
            salt += chars[random.randint(0, len_chars)]  
        return salt  
      
    # 获取原始密码+salt的md5值  
    def create_md5(pwd,salt):  
        md5_obj = hashlib.md5()  
        md5_obj.update((pwd + salt).encode("utf-8"))  
        return md5_obj.hexdigest()  
      
    # 原始密码  
    pwd = '123456'  
    # 随机生成4位salt  
    salt = create_salt()  
    # 加密后的密码  
    md5 = create_md5(pwd, salt)  
      
    print('[pwd]
    ',pwd ) 
    print('[salt]
    ', salt)  
    print('[md5]
    ', md5) 

     python获取毫秒级别时间戳

    1、获取秒级时间戳与毫秒级时间戳、微秒级时间戳
    import time
    import datetime
    t = time.time()
    print (t)                       #原始时间数据
    print (int(t))                  #秒级时间戳
    print (int(round(t * 1000)))    #毫秒级时间戳
    print (int(round(t * 1000000))) #微秒级时间戳
    
    
    
    心有猛虎,细嗅蔷薇
  • 相关阅读:
    微服务技术选型
    分布式事务
    微服务架构下的身份认证
    java core
    java web基础知识
    java基础知识学习 内存相关
    java基础知识学习 java异常
    java 基础知识学习 JVM虚拟机参数配置
    java 基础知识学习 内存泄露(memory leak) VS 内存溢出(out of memory)以及内存管理
    【F12】chrome浏览器中 F12 功能的简单介绍
  • 原文地址:https://www.cnblogs.com/1314520xh/p/14762298.html
Copyright © 2011-2022 走看看