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 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的更多相关文章
- Python模块——HashLib与base64
摘要算法(hashlib) Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...
- python模块: hashlib模块, configparse模块, logging模块,collections模块
一. hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用 ...
- Python模块——HashLib(摘要算法)与base64
摘要算法(hashlib) Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...
- Python模块hashlib
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制 ...
- 20 常用模块 hashlib hmac:加密 xml xlrd xlwt:excel读|写 configparser subprocess
hashlib模块:加密 加密: 1.有解密的加密方式 2.无解密的加密方式:碰撞检查 hashlib -- 1)不同数据加密后的结果一定不一致 -- 2)相同数据的加密结果一定是一致的 import ...
- python模块:hmac
"""HMAC (Keyed-Hashing for Message Authentication) Python module. Implements the HMAC ...
- python模块——hashlib模块(简单文件摘要算法实现)
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki" # Usage: hashlib模块 import ...
- python模块之hmac
# hmac模块使用步骤: # hmac模块模块的使用步骤与hashlib模块的使用步骤基本一致,只是在第1步获取hmac对象时,只能使用hmac.new()函数, # 因为hmac模块没有提供与具体 ...
- Python3入门(十三)——常用内置模块之摘要模块hashlib/hmac
(1)hashlib hashlib提供了常见摘要算法:如MD5,SHA1等等 一个md5的加密示例如下: import hashlib m = hashlib.md5() m.update(&quo ...
随机推荐
- Codevs 1519 过路费(Mst+Lca)
1519 过路费 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 在某个遥远的国家里,有 n个城市.编号为 1,2,3,-,n. ...
- 一、MySQL一些简述
概述 数据库(database) : 保存有组织的数据的容器(通常是一个文件或一组文件). 主键(primary key): 唯一标识表中每行的这个列(或这组列)称为主键.主键用表示一个特定的行.没有 ...
- Vue_(组件)自定义指令
Vue.js自定义指令 传送门 自定义指令:除了内置指令,Vue也允许用户自定义指令 注册指令:通过全局API Vue.directive可以注册自定义指令 自定义指令的钩子函数参数:自定义指令的钩子 ...
- Http请求优化
Http请求优化 我们在做项目开发或多或少的都会使用SpringCloud,其中做远程调度的时候会将HTTP请求Http请求优化. HTTP请求Client存在很多种. JDK原生的URLConnec ...
- 关于数据库表设计之区域表system_district:省市县街道四级地址表
关于省市县的数据表的设计有两种方式: 一.将其设计成一张表 DROP TABLE IF EXISTS `system_district`; CREATE TABLE `system_district` ...
- DB 分库分表(3):关于使用框架还是自主开发以及 sharding 实现层面的考量
当团队对系统业务和数据库进行了细致的梳理,确定了切分方案后,接下来的问题就是如何去实现切分方案了,目前在sharding方面有不少的开源框架和产品可供参考,同时很多团队也会选择自主开发实现,而不管是选 ...
- spring-jms,spring-boot-starter-activemq JmsTemplate 发送方式
spring-jms,spring-boot-starter-activemq JmsTemplate 发送方式 背景: 原来我准备是setDefaultDestinationName 设置队列的名称 ...
- win10 c++程序打包
步骤如下: 1. 先动态编译连链接,生成exe: 2. 找到exe依赖的dll文件 使用Process Explore来获取所依赖的dll文件 打开procexp.exe,通过菜单View–Lower ...
- nginx环境准备
一.环境调试确认 1.四项确认 确认公网已连通. 确认yum源可用. 确认iptables已经关闭. 确认selinux已经关闭. a.确认是否连通公网. ping www.baidu.com b.确 ...
- P2983 [USACO10FEB]购买巧克力
P2983 [USACO10FEB]购买巧克力 题解 注意题目开 long long 贪心策略:价格从低到高,买够为止 反证:若剩下的有一个K”,比K小,那么交换,稳赚不赔 所以,在买K之前,所有比他 ...