Python hashlib模块详情

 更新时间:2021年11月30日 10:33:21   作者:盆友圈的小可爱  
本文,我们来对Python 提供的安全哈希算法的通用接口-hashlib模块进行学习,文章内容具有一定的参考价值,需要的小伙伴可以参考一下

前言:

在互联网的时代,我们在网络中传输过程中都是要经过加密的,常见网络数据传输的加密方式有MD5RSA算法。当然,加密算法还有很多中按加密、解密方式不同分为:对称加密非对称加密hash加密。其中MD5算法的基础是使用的hash算法,针对不同安全的hash安全算法,Python也提一个通用接口hashlib模块。

1. hashlib 模块概述

hashlibPython 内置用于对安全哈希和消息摘要的通用接口模块。hashlib 模块支持提供目前主流hash算法如MD5SHA-1SHA-2SHA-256等通用构造方法,并且返回带有同样接口的hash对象。

1.1hashlib 模块特点

  • 提供主流的hash算法操作,替代md5模块和sha模块
  • 模块调用简单,无需下载安装
  • 主要应用在文本加密场景如用户登录认证

1.2hashlib 模块使用步骤

  • 导入hashlib库import hashlib
  • 建立加密对象
  • 对字符串进行加密处理
  • 获取转换成新的N个Bit

2. hashlib 工作原理

hashlib 模块中加密方式是我们常见的hash算法。hash算法又称为散列表(hash table),也叫做哈希表。

2.1hash 算法特点

  • 具有唯一确定性,不同字符串加密后都是不一样的
  • 不可逆性,hash只有加密没有解密过程
  • 散列碰撞,输出和输入值不是一一对应关系

2.2hash 构造方法

直接定址方法

  • 公式一:hash(key) = key
  • 公式二:hash(key) = a*key+b
  • 我们可以查看到直接定址方法具有线性的特点,因此适用在关键字分布连续的情况

数学分析方法

  • 方式:提取关键字中随机性好的数字位,将其拼接为哈希地址
  • 适用场景:关键字已知的情况下,对关键字中每一位进行取值情况分析

除留余数方法

  • 公式hash(key) = key % p
  • 除数采用取余模运算

2.3hash 算法过程

  • hash 函数接收到输入的字符串,首先会先进行预处理-哈希计算-输入摘要
  • 预处理:将字符串进行填充、分割N块,为hash进行初始化
  • 哈希计算:将预处理的数据完成指定算法生成消息摘要
  • 每指定一种hash算法只会生成固定长度的摘要,长度越长的安全性越高

2.4hash 常用算法

MD5

MD5:message-Digest Algorithm 5 信息-摘要算法5,该算法用于信息完整性进行校验

  • 计算方式:求余、取余、调整长度、进行链接变量循环运算求出结果
  • 用途:主要用于文件校验

SHA-1

SHA:secure Hash Algorithm 安全散列算法1,是一种密码散列算法,SHA-1可以生成摘要消息为40位的16进制即160位(20字节)的散列值

  • 用途:TSL、SSL、PGP、SSH等协议中广泛使用

3. hashlib 属性方法

hashlib 模块相关属性

属性 作用
hashlib.algorithms_guaranteed 保证所有平台上都支持哈希算法的名称
hashlib.algorithms_available 保证平台上运行的Python解释器上可用的hash算法的名称

hashlib 构造对象相关的属性

属性 作用
hash.digest_size 以字节表示哈希对象的大小
hash.block_size 以字节表示哈希算法的内部块大小
hash.name 哈希对象的名称

hashlib 模块相关方法目前可以支持主流hash算法。

方法 作用
hashlib.pbkdf2_hmac(hash_name,password,salt,itera,dklen=None) PKCS#5基于密码的秘钥派生函数2,作为HMAC作为伪随机函数
hashlib.scrypt(password,*,salt) 基于密码加密的秘钥派生函数
hashlib.md5() md5加密方式
hashlib.sha1 sha1加密方式
hashlib.sha256 sha256加密方式
hashlib.blake2b () blake2b加密方式
hashlib.blake2s black2s加密方式

hashlib 构造对象相关的方法

方法 作用
hash.update(data) 以字节表示哈希对象
hash.digest() 返回当前已传给update()方法的数据摘要
hash.hexdigest() 以16进制的字符串表示哈希数据值
hash.copy() 将hash对象复制,共享初始数据的摘要

4. 实操

我们学习hashlib模块中对字符串进行hash算法处理,我们来实操一下吧

import hashlib

text_md5 = hashlib.md5()

text_md5.update(bytes("hello juejing",encoding="utf-8"))

print("md5:",text_md5.hexdigest())

text_sha1 = hashlib.sha1()

text_sha1.update(bytes("hello juejing",encoding="utf-8"))

print("sha1:",text_sha1.hexdigest())



text_sha256 = hashlib.sha3_256()

text_sha256.update(bytes("hello juejing",encoding="utf-8"))

print("sha256:",text_sha256.hexdigest())



text_crc32 = hashlib.()

text_sha256.update(bytes("hello juejing",encoding="utf-8"))

print("sha256:",text_sha256.hexdigest())

💬 重要说明

  • 添加自定义key与字符串进行组合加密(加盐)
  • 以MD5加密为例如下

加盐写法一:

text_md5 = hashlib.md5(b"key")

text_md5.update("字符串".encode("utf-8")) 

加盐写法二:

key = "字符串"

yan = "字符串2"

text_md5 = hashlib.md5()

text_md5.upadte((key+yan).encode("utf-8"))

5、总结

本期,我们对hashlib模块中hash算法特点、hashlib模块相关支出算法的方法进行学习和实操。在hash算法中我们常用使用md5/sha1/sha256主要用于文本校验、用户登录认证等数据校验同时,hash算法确保数据的完整性,具有不可逆性,同时它会遭遇到暴力碰撞,因此hash长度越长的安全性也越高。

到此这篇关于Python hashlib模块兴趣的文章就介绍到这了,更多相关Python hashlib模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中is和==的区别详解

    Python中is和==的区别详解

    这篇文章主要介绍了Python中is和==的区别详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Python使用Pandas处理测试数据的方法

    Python使用Pandas处理测试数据的方法

    Pandas是一个功能极其强大的数据分析库,可以高效地操作各种数据集,这篇文章主要介绍了Python自动化测试-使用Pandas来高效处理测试数据,需要的朋友可以参考下
    2023-02-02
  • 浅谈python连续赋值可能引发的错误

    浅谈python连续赋值可能引发的错误

    今天小编就为大家分享一篇浅谈python连续赋值可能引发的错误,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • 五分钟学会怎么用Pygame做一个简单的贪吃蛇

    五分钟学会怎么用Pygame做一个简单的贪吃蛇

    这篇文章主要介绍了五分钟学会怎么用Pygame做一个简单的贪吃蛇,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • 使用OpenCV实现迷宫解密的全过程

    使用OpenCV实现迷宫解密的全过程

    同学发了我张迷宫图片,让我走迷宫来缓解暴躁,于是乎就码了一个程序出来,下面这篇文章主要给大家介绍了关于使用OpenCV实现迷宫解密的相关资料,需要的朋友可以参考下
    2022-10-10
  • Python中pip工具的安装以及使用

    Python中pip工具的安装以及使用

    今天给大家带来关于Python的相关知识,文章围绕着pip工具的安装以及使用展开,文中有非常详细的图文示例及介绍,需要的朋友可以参考下
    2021-06-06
  • Python实现拼接多张图片的方法

    Python实现拼接多张图片的方法

    这篇文章主要介绍了Python实现拼接多张图片的方法,以具体的实际应用引出Python拼接图片的思路并给出了实现的具体方法,需要的朋友可以参考下
    2014-12-12
  • python之import机制详解

    python之import机制详解

    这篇文章主要介绍了python的import机制,需要的朋友可以参考下
    2014-07-07
  • python 列表元素左右循环移动 的多种解决方案

    python 列表元素左右循环移动 的多种解决方案

    这篇文章主要介绍了python 列表元素左右循环移动 的多种解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • python基础入门之字典和集合

    python基础入门之字典和集合

    Python中的字典和集合是非常相似的数据类型,字典是无序的键值对。集合中的数据是不重复的,并且不能通过索引去修改集合中的值,我们可以往集合中新增或者修改数据。集合是无序的,并且支持数学中的集合运算,例如并集和交集等。
    2021-06-06

最新评论