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 hmac
key = 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不相等

python模块hashlib & hmac的更多相关文章

  1. Python模块——HashLib与base64

    摘要算法(hashlib) Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...

  2. python模块: hashlib模块, configparse模块, logging模块,collections模块

    一. hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用 ...

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

    摘要算法(hashlib) Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...

  4. Python模块hashlib

    Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制 ...

  5. 20 常用模块 hashlib hmac:加密 xml xlrd xlwt:excel读|写 configparser subprocess

    hashlib模块:加密 加密: 1.有解密的加密方式 2.无解密的加密方式:碰撞检查 hashlib -- 1)不同数据加密后的结果一定不一致 -- 2)相同数据的加密结果一定是一致的 import ...

  6. python模块:hmac

    """HMAC (Keyed-Hashing for Message Authentication) Python module. Implements the HMAC ...

  7. python模块——hashlib模块(简单文件摘要算法实现)

    #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki" # Usage: hashlib模块 import ...

  8. python模块之hmac

    # hmac模块使用步骤: # hmac模块模块的使用步骤与hashlib模块的使用步骤基本一致,只是在第1步获取hmac对象时,只能使用hmac.new()函数, # 因为hmac模块没有提供与具体 ...

  9. Python3入门(十三)——常用内置模块之摘要模块hashlib/hmac

    (1)hashlib hashlib提供了常见摘要算法:如MD5,SHA1等等 一个md5的加密示例如下: import hashlib m = hashlib.md5() m.update(&quo ...

随机推荐

  1. 什么是URL百分号编码?

    ㈠什么是URL 统一资源定位系统(uniform resource locator;URL)是因特网的万维网服务程序上用于指定信息位置的表示方法. ㈡URL编码 url编码是一种浏览器用来打包表单输入 ...

  2. The Semantics of Constructors(拷贝构造函数之编译背后的行为)

    本文是 Inside The C++ Object Model's Chapter 2  的部分读书笔记. 有三种情况,需要拷贝构造函数: 1)object直接为另外一个object的初始值 2)ob ...

  3. zabbix服务端接收的数据类型,便于编写脚本向服务端提交数据

    1.数据类型1:zabbix_agent执行脚本提交字典 UserParameter=tcp_port_listen,/usr/local/zabbix/share/script/get_game_p ...

  4. Tiling_easy version

    Tiling_easy version 思路:关于dp这种东西,有一点必须要想明白,就是状态与状态之间的转换关系,就比如说要求5个骨牌的方案数,因为有两种骨牌,那么可以用dp[3]+两个横着的骨牌或者 ...

  5. apache httpd.conf 文件的 详解

    文章 摘自 :http://www.php100.com/html/webkaifa/apache/2009/0418/1192.html   ServerRoot /usr/local Server ...

  6. Vue双向绑定的实现原理系列(一):Object.defineproperty

    了解Object.defineProperty() github源码 Object.defineProperty()方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. ...

  7. python如何实现一个类似重载的功能

    def post(): print("this is post") print("想不到吧") class Http(): @classmethod def g ...

  8. AIDL 的工作原理

    当创建AIDL文件并Clean Project 代码后,会生成相应的Java文件: 先来一段伪代码:类整体结构 /* * This file is auto-generated. DO NOT MOD ...

  9. MySql 时区错误

    mysql的时区错误问题: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one ...

  10. better-scroll 的介绍

    配置项中的 probeType 属性,是number,当值为 0 ,不会实时监听 scroll 事件,设置为 2 - 3 ,可以实时监听 scroll 事件 pullUpload 选项,设置为 fal ...