python模块hashlib & hmac

Hash,译做“散列”,也有直接音译为“哈希”的。把任意长度的输入,通过某种hash算法,变换成固定长度的输出,该输出就是散列值,也称摘要值。该算法就是哈希函数,也称摘要函数。

MD5是最常见的摘要算法,速度很快,生成结果是固定的16字节,通常用一个32位的16进制字符串表示。SHA1算法更安全点,它的结果是20字节长度,通常用一个40位的16进制字符串表示。而比SHA1更安全的算法是SHA256和SHA512等等,不过越安全的算法越慢,并且摘要长度更长。

两个模块主要用于加密相关的操作(加密数据时一定要指定数据编码格式。可以使用字符串前b‘ ‘的方法或使用.encode(‘UTF-8‘)的方法,使字符串变为bytes类型)

hashlib模块

md5

import hashlib
ha_m5 = hashlib.md5()#创建对象
ha_m5.update(‘abc‘.encode(encoding=‘utf-8‘))#添加对象时需要指定编码
print(ha_m5.digest())#以二进制格式显示加密信息
print(ha_m5.hexdigest())#以十六进制格式显示加密信息(常用)

应用实例:

    def md5_lower_32(dic,secret):
        """
        接口的鉴权方法
        把参数字典中value非空的键值对按顺序进行拼接后,再加上密钥secret进行MD5得到sign
        """
        lis = dic.items()
        lis = sorted(lis,reverse=False)
        key_value = []
        for key,value in lis:
            if value:
                if type(value) is int:
                    value = str(value)
                elif type(value) is not str:
                    continue
                elif key == ‘sign‘:
                    continue
                s = key+‘=‘+value
                key_value.append(s)
        key_value.append(‘secret=%s‘%secret)
        string = ‘&‘.join(key_value)
        print(string)
        md = hashlib.md5()
        md.update(string.encode(encoding=‘utf-8‘))
        ret = md.hexdigest()#以十六进制格式显示加密信息(常用),md.digest()是以二进制格式显示加密信息
        return ret

sha1(sha224   sha256  sha384  sha512等不作赘述)

ha_s1 = hashlib.sha1()
ha_s1.update(‘abc‘.encode(encoding=‘utf-8‘))
print(ha_s1.digest())#以二进制格式显示加密信息print(ha_s1.hexdigest())#以十六进制格式显示加密信息

hmac模块

sha1(方法支持加盐)

import hmackey = b‘salt‘data = b‘sjdhjwkdjk‘hm = hmac.new(key,data,hashlib.sha1)hm.digest()#以二进制格式显示加密信息hm.hexdigest()#以十六进制格式显示加密信息

应用实例:


import hmac,base64
def sha1_base64(key,data):
    data_sha1 = hmac.new(key,data,hashlib.sha1).digest()
    data_sha1_base64 = base64.b64encode(data_sha1)
    return data_sha1_base64

以下代码是对应的php写法,当时用python实现是为了测试开发人员的接口实现的正确性

base64_encode(hash_hmac("sha1", QUERY_STRING, KEY, TRUE))

ps:有个搞不明白的地方在此记录,以上实际使用时,hmac模块的sha1加密算法得到的值,通过hashlib模块没法得到

研究hashlib底层代码没看懂如何加盐即key,试着用如下方法,得到的结果不对~

key = b‘salt‘data = b‘sjdhjwkdjk‘hm = hmac.new(key,data,hashlib.sha1)
res1 = hm.digest()

ha_s1 = hashlib.sha1(key)
ha_s1.update(data)
res2 = ha_s1.digest() 

res1和res2不相等

原文地址:https://www.cnblogs.com/yy-cola/p/11683671.html

时间: 2024-10-07 20:54:09

python模块hashlib & hmac的相关文章

python模块——hashlib

python模块--hashlib hashlib模块是对许多hash函数的一个公共接口 new(name, string = '')    执行给定的hash函数来返回一个新的hash对象,使用给定的字符串数据初始化hash对象.如: >>> import hashlib >>> hashlib.new('md5', string='abc').hexdigest()    #hexdigest() 使加密后的结果以十六进制显示 '900150983cd24fb0d6

Python模块——HashLib与base64

摘要算法(hashlib) Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示) 你写了一篇文章,内容是一个字符串'how to use python hashlib - by Michael',并附上这篇文章的摘要是'2d73d4f15c0db7f5ecb321b6a65e5d6d'. 如果有人篡改了你的文章,并发表为'how to

python模块: hashlib模块, configparse模块, logging模块

一. hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示). 摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过.摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难.而且,对原

Python模块——HashLib(摘要算法)与base64

摘要算法(hashlib) Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示) 你写了一篇文章,内容是一个字符串'how to use python hashlib - by Michael',并附上这篇文章的摘要是'2d73d4f15c0db7f5ecb321b6a65e5d6d'. 如果有人篡改了你的文章,并发表为'how to

python模块 hashlib(加密服务)

https://docs.python.org/zh-cn/3/library/hashlib.html hashlib --- 安全哈希与消息摘要 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要digest algorithms算法呢?摘要算法又称哈希hash算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示). hash算法 每种类型的hash都有一个构建器方法,返回一个hash对象和相同的简单接口.

Python模块 - hashlib

hashlib python中的hashlib模块用来进行hash或者md5加密,而且这种加密是不可逆的,所以这种算法又被称为摘要算法.其支持Openssl库提供的所有算法,包括md5.sha1.sha224.sha256.sha512等. 常用的属性和方法: algorithms:列出所有加密算法('md5','sha1','sha224','sha256','sha384','sha512') digesti_size:产生的散列的字节大小 md5()/sha1():创建一个md5或者sha

python 模块 hashlib(提供多个不同的加密算法)

hashlib是涉及安全散列和消息摘要,提供多个不同的加密算法借口,如SHA1.SHA224.SHA256.SHA384.SHA512.MD5等. import hashlib m = hashlib.md5() #创建hash对象,md5:(message-Digest Algorithm 5)消息摘要算法,得出一个128位的密文 print m #<md5 HASH object @ 000000000254ADF0> m.update('BeginMan')#更新哈希对象以字符串参数 p

python(6)- hashlib模块

加密算法: SHA1,SHA224, SHA256, SHA384, SHA512 , MD5 1. md5 import hashlib m = hashlib.md5() m.update(b"Hello") #加密 m.update(b"It's me") #再加密一句 print(m.digest()) #二进制 print(m.hexdigest()) #16进制 2.SHA1 #SHA1 m = hashlib.sha1() m.update(b&quo

python模块 os&amp;sys&amp;subprocess&amp;hashlib模块

os模块 # os模块可根据带不带path分为两类 # 不带path print(os.getcwd()) # 得到当前工作目录 print(os.name) # 指定你正在使用的操作系统,windows为nt,linux为“posix" os.shell() # 运行shell命令 print(os.environ) # 返回操作系统所有的环境变量 print(os.getenv("home")) # 读取指定环境变量的值 os.environ.setdefault(&qu