Python加密与解密模块hashlib与hmac

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。

摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。

一、hashlib加密模块

hash是一种算法(Python3.版本里使用hashlib模块代替了md5模块和sha模块,主要提供 SHA1、SHA224、SHA256、SHA384、SHA512、MD5 算法),该算法接受传入的内容,经过运算得到一串hash值。

hash值的特点:

  • 只要传入的内容一样,得到的hash值一样,可用于非明文密码传输时密码校验
  • 不能由hash值返解成内容,即可以保证非明文密码的安全性
  • 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的,可以用于对文本的哈希处理

MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示

import hashlib

m = hashlib.md5() # 创建md5对象
b = 'hello'.encode(encoding='utf-8') # 此处必须encode, 或者 b = bytes(str, encoding='utf-8'),作用相同都是encode为bytes,将str默认的unicode转成utf-8.
m.update(b); #该方法只接受bytes类型

print(m.hexdigest())  #将hash中的数据转换成数据,其中只包含十六进制的数字。 5d41402abc4b2a76b9719d911017c592

# 另一种写法:b‘'前缀代表的就是bytes ,对英文加密,才可以使用b' '前缀,b' '在python中只能对ASCII字符进行转码。
str_md5 = hashlib.md5(b'this is a md5 test.').hexdigest()
print('MD5加密后为 :' + str_md5)

如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的。

SHA1的生成结果是160 bit字节,通常用一个40位的16进制字符串表示。

比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法不仅越慢,而且摘要长度更长。

二、hmac 加盐加密模块

Python自带的hmac模块实现了标准的Hmac算法:Keyed-Hashing for Message Authentication。它通过一个标准算法,在计算哈希的过程中,把key混入计算过程中。它内部对我们创建key和内容做过某种处理后再加密。

和我们自定义的加salt算法不同,Hmac算法针对所有哈希算法都通用,无论是MD5还是SHA-1。采用Hmac替代我们自己的salt算法,可以使程序算法更标准化,也更安全。

我们来看看如何使用hmac实现带key的哈希。

我们首先需要准备待计算的原始消息message,随机key,哈希算法,这里采用MD5,使用hmac的代码如下:

import hmac
message = b'Hello, world!'
key = b'secret'
h = hmac.new(key, message, digestmod='MD5')
# 如果消息很长,可以多次调用h.update(msg)
h.hexdigest() # 'fa4ee7d173f2d97ee79022d1a7355bcf'

注意:要注意传入的key和message都是bytes类型,str类型需要首先编码为bytes

def hmac_md5(key, s):
    return hmac.new(key.encode('utf-8'), s.encode('utf-8'), 'MD5').hexdigest()

如果要保证hmac模块最终结果一致,必须保证:

  • hmac.new括号内指定的初始key一样
  • 无论update多少次,校验的内容累加到一起是一样的内容
import hashlib
import hmac

# 注意hmac模块只接受二进制数据的加密
h1 = hmac.new(b'hash', msg=None, digestmod=hashlib.md5)
h1.update(b'hello')
h1.update(b'world')
print(h1.hexdigest())  # 905f549c5722b5850d602862c34a763e

h2 = hmac.new(b'hash', msg=None, digestmod=hashlib.md5)
h2.update(b'helloworld')
print(h2.hexdigest())  # 905f549c5722b5850d602862c34a763e

h3 = hmac.new(b'hashhelloworld', msg=None, digestmod=hashlib.md5)
print(h3.hexdigest())  # a7e524ade8ac5f7f33f3a39a8f63fd25

到此这篇关于Python加密与解密的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python hashlib和hmac模块使用方法解析

    python之hashlib模块:主要提供字符加密功能,python3中将md5和sha模块整合到了hashlib模块,支持md5,sha1, sha224, sha256, sha384, sha512等算法 #!/usr/bin/env python3 # -*- coding: utf-8 -*- import hashlib # md5 加密算法 a = hashlib.md5() a.update("Hello Lanten.".encode("utf-8"

  • Python内置模块hashlib、hmac与uuid用法分析

    本文实例讲述了Python内置模块hashlib.hmac与uuid用法.分享给大家供大家参考,具体如下: 一.hashlib md5和sha算法通过消息摘要算法生成定长的消息摘要,消息摘要算法是不可逆的.但同一段消息通过摘要算法后得到的值是一样的,可一通过比对消息摘要验证数据的完整性. sha算法比MD5算法安全,但所需的时间也稍长. 1.原始消息摘要 import hashlib # ######## md5 ######## hash = hashlib.md5() hash.update

  • Python加密模块的hashlib,hmac模块使用解析

    这篇文章主要介绍了Python加密模块的hashlib,hmac模块使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在写搬砖脚本中,碰到一个加密的信号标签文件无法运行. import hashlib import time m = hashlib.md5() api_key = '' api_secret = '' params = {'api_key':api_key, 'time':int(time.time()), 'symbol

  • Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析

    本文实例讲述了Python3.5内置模块之shelve模块.xml模块.configparser模块.hashlib.hmac模块用法.分享给大家供大家参考,具体如下: 1.shelve模块 shelve类似于一个key-value数据库,可以很方便的用来保存Python的内存对象,其内部使用pickle来序列化数据, 简单来说,使用者可以将一个列表.字典.或者用户自定义的类实例保存到shelve中,下次需要用的时候直接取出来, 就是一个Python内存对象,不需要像传统数据库一样,先取出数据,

  • Python3 加密(hashlib和hmac)模块的实现

    以下代码以Python3.6.1为例 hashlib : 不可逆加密 hmac : 不可逆键值对方式加密 hashlib模块简介: hashlib模块为不同的安全哈希/安全散列(Secure Hash Algorithm)和 信息摘要算法(Message Digest Algorithm)实现了一个公共的.通用的接口,也可以说是一个统一的入口.因为hashlib模块不仅仅是整合了md5和sha模块的功能,还提供了对更多中算法的函数实现,如:MD5,SHA1,SHA224,SHA256,SHA38

  • Python加密与解密模块hashlib与hmac

    Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示). MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示. 一.hashlib加密模块 hash是一种算法(Python3.版本里使用hashlib模块代替了md5模块和sha模块,主要提供 SHA1.SHA224.SHA256.SHA384.SH

  • 盘点Python加密解密模块hashlib的7种加密算法(推荐)

    前言 在程序中我们经常可以看到有很多的加密算法,比如说MD5 sha1等,今天我们就来了解下这下加密算法的吧,在了解之前我们需要知道一个模块嘛就是hashlib,他就是目前Python一个提供字符加密的模块,它加密的字符类型为二进制编码,所以直接加密字符串会报错. import hashlib string='任性的90后boy' #使用encode进行转换 sha1 = hashlib.sha1() sha1.update(string.encode('utf-8')) res = sha1.

  • Python 加密与解密小结

    阅读目录 前言 加密算法分类 Python加密库 DES加密 AES加密 RSA加密 前言 据记载,公元前400年,古希腊人发明了置换密码.1881年世界上的第一个电话保密专利出现.在第二次世界大战期间,德国军方启用"恩尼格玛"密码机,密码学在战争中起着非常重要的作用. 随着信息化和数字化社会的发展,人们对信息安全和保密的重要性认识不断提高,于是在1997年,美国国家标准局公布实施了"美国数据加密标准(DES)",民间力量开始全面介入密码学的研究和应用中,采用的加密

  • 详解使用Nodejs内置加密模块实现对等加密与解密

    加密与解密是保证通讯安全的一种重要手段,现在加密算法已经有很多,并且都有成熟的软件包可以使用,这就大大降低了应用开发程序员的负担,只需要使用这些第三方提供的加密解密库就可以使用了,在Node.js中其实提供了一个非常强大而且方便的加密与解密模块crypto,我们不需要使用第三方的NPM库就能实现简单的加密与解密功能,毕竟使用加密与解密的目的就是为了保证通讯的安全,而使用非官方的第三方库总是有可能存在添加的后门或者什么的,而使用Node.js自带的crypto模块就能最大程度的保证加密的安全性.

  • Spring MVC请求参数与响应结果全局加密和解密详解

    前提 前段时间在做一个对外的网关项目,涉及到加密和解密模块,这里详细分析解决方案和适用的场景.为了模拟真实的交互场景,先定制一下整个交互流程.第三方传输(包括请求和响应)数据报文包括三个部分: 1.timestamp,long类型,时间戳. 2.data,String类型,实际的业务请求数据转化成的Json字符串再进行加密得到的密文. 3.sign,签名,生成规则算法伪代码是SHA-256(data=xxx&timestamp=11111),防篡改. 为了简单起见,加密和解密采用AES,对称秘钥

  • 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如何基于rsa模块实现非对称加密与解密

    这篇文章主要介绍了Python如何基于rsa模块实现非对称加密与解密,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.简单介绍: RSA加密算法是一种非对称加密算法 是由已知加密密钥推导出解密密钥在计算上是不可行的"密码体制.加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的. RSA密钥至少为500位长,一般推荐使用1024位.RSA密钥长度随着保密级别提高,增加很快. 由于RSA的特性,一个1024位的密钥只能

  • Python基于pycrypto实现的AES加密和解密算法示例

    本文实例讲述了Python基于pycrypto实现的AES加密和解密算法.分享给大家供大家参考,具体如下: 一 代码 # -*- coding: UTF-8 -*- import string import random from Crypto.Cipher import AES def keyGenerater(length): '''''生成指定长度的秘钥''' if length not in (16, 24, 32): return None x = string.ascii_lette

随机推荐