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. 判断一个ip地址合法性(基础c,不用库函数)

    #include <stdio.h> int judge(char *strIp); int main() { ]; ) { scanf("%s", a); == ju ...

  2. 本地创建的项目使用版本管理(git)推送至远端。

    1.创建项目 mkdir nidexiangmu cd nidexiangmu touch README.md 2.使用 git 命令管理 git init // 建立本地仓库 git add . / ...

  3. Latex中 summation前后距离的设置

    use \hspace ,eg., \hspace{-.1cm} before and after summation to stop violation of margin. 比如下面一段公式代码 ...

  4. CentOS7 安装JumpServer

    环境: CentOS Linux release 7.6.1810 (Core) JumpServer 1.4.8 Python 3.6.X MariaDB 编译安装Python3.6 首先,下载Py ...

  5. 已知源目录路径sourceFilePath,此目录下还有多级子目录和多个文本文件(*.txt)。尝试编写一个方法,将此目录下所有的文件拷贝至另一个目录targetFilePath,并其中的文本文件修改成SQL文件(*.SQL)。

    public void copyFile(String oldPath, String newPath) throws IOException { (new File(newPath)).mkdirs ...

  6. JSP自定义标签的执行原理

    当浏览器发来请求后,会将这个请求交给JSP翻译成的servlet来处理,自定义标签对应servlet中一个方法的调用,这个方法主要步骤如下 1,产生标签处理类的实例对象 2,将pageContext传 ...

  7. Cannot use unsafe construct in safe context

    https://stackoverflow.com/questions/25953887/how-to-use-unsafe-code-in-safe-contex I am not sure if ...

  8. Less相关的用法以及Vue2.0 中如何使用Less

    (一)less的用法: (二)vue 2.0中如何使用less插件 1:vue先安装less插件 npm install less less-loader --save 2:修改webpack.bas ...

  9. 模拟LinkedList

    Linkedlist是一个集合容器,具有增删改查基本功能,本例中模拟增删查,对于修改,只需要将原节点处的val更新为新值即可,增加和删除在链表中速度是比较快的,查找,修改慢,因为要从头或者从尾开始遍历 ...

  10. [学习笔记] Uplift Decision Tree With KL Divergence

    Uplift Decision Tree With KL Divergence Intro Uplift model 我没找到一个合适的翻译,这方法主要应用是,探究用户在给予一定激励之后的表现,也就是 ...