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))) #微秒级时间戳


心有猛虎,细嗅蔷薇
原文地址:https://www.cnblogs.com/1314520xh/p/14762298.html