Python中hashlib模块的摘要算法详解

 更新时间:2023年08月11日 10:43:21   作者:爱吃 香菜  
这篇文章主要介绍了Python中hashlib模块的摘要算法详解,摘要算法又称哈希算法、散列算法,它通过一个函数,把任意长度的数据转换为一个长度固定的数据串,通常用16进制的字符串表示,需要的朋友可以参考下

hashlib 模块

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

什么是摘要算法呢?

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

摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算 f(data) 很容易,但通过 digest 反推 data 却非常困难。

而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

示例

我们以常见的摘要算法MD5为例,计算出一个字符串的MD5值:

import hashlib
md5 = hashlib.md5()
md5.update('my name is leizi'.encode('utf-8'))
print(md5.hexdigest())

那么计算出来的md5就是

d7d8c24cddfb4c15b83db713badda3d3

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

 
import hashlib
md5 = hashlib.md5()
md5.update('my name is leizi'.encode('utf-8'))
md5.update(" 欢迎关注伤心的辣条".encode('utf-8'))
print(md5.hexdigest())

最后的结果

96f4063331ea2c477fb3d7e980d73404

试试改动一个字母,看看计算的结果是否完全不同。

import hashlib
md5 = hashlib.md5()
md5.update('my name is leizi1'.encode('utf-8'))
md5.update(" 欢迎关注伤心的辣条 ".encode('utf-8'))
print(md5.hexdigest())

结果打印

57488933f9d74f5404533d111cbbf4e4

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

另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似:

import hashlib
sha1 = hashlib.sha1()
sha1.update('my name is leizi '.encode('utf-8'))
sha1.update('欢迎关注伤心的辣条'.encode('utf-8'))
print(sha1.hexdigest())

结果:

abbe3ae3d30736838602e9d119a2dfe016577a07

常用的属性

hashlib.algorithms
#列出所有加密算法
h.digest_size
#产生的散列字节大小。
h.block_size
#哈希内部块的大小

常用方法

hash.new([arg])
# 创建指定加密模式的hash对象
hash.update(arg)
# 更新哈希对象以字符串参数。如果同一个hash对象重复调用该方法,m.update(a); m.update(b) 等价于 m.update(a+b)
hash.digest()
# 返回摘要,作为二进制数据字符串值。
hash.hexdigest()
# 返回摘要,作为十六进制数据字符串值
hash.copy()
# 复制

hashlib的特点

1、摘要算法在很多地方都有广泛的应用。

2、要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改。

3、它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。

一个优秀的 hash 算法,将能实现:

  • 正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。
  • 逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。
  • 输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。
  • 冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。

除了上面,我们列举的几个,库里还有这些加密方式:

  • sha224()
  • sha256()
  • sha384()
  • sha512()
  • blake2b()
  • blake2s()
  • sha3_224
  • sha3_256
  • sha3_384
  • sha3_512
  • shake_128
  • shake_256
  • 等等

主要的应用场景呢,就是我们的密码的加密和明文的加密,按照一定的约定去形成我们的加密的方式即可,有些时候为了避免太过于简单的加密,我们会约定一个私钥,增加加密的复杂性。

在自动化中,我还会用这个产生不一样的文件的名称,这样可以方便在自动化的过程中有区分。

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

相关文章

  • python生成IP段的方法

    python生成IP段的方法

    这篇文章主要介绍了python生成IP段的方法,涉及Python文件读写及随机数操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Python pandas如何根据指定条件筛选数据

    Python pandas如何根据指定条件筛选数据

    这篇文章主要介绍了Python pandas如何根据指定条件筛选数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • python常量折叠基础知识点讲解

    python常量折叠基础知识点讲解

    在本篇文章里小编给大家整理的是一篇关于python常量折叠基础知识点讲解,对此有兴趣的朋友可以跟着学习下。
    2021-02-02
  • Python自动化之实现桌面壁纸下载器

    Python自动化之实现桌面壁纸下载器

    随着计算机性能的提升,人们对计算机个性化的要求也越来越高了,自己使用的计算机当然要设置成自己喜欢的风格!本文就来用Python做个桌面壁纸下载器,需要的可以参考一下
    2022-11-11
  • 对django的User模型和四种扩展/重写方法小结

    对django的User模型和四种扩展/重写方法小结

    今天小编就为大家分享一篇对django的User模型和四种扩展/重写方法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Pandas筛选某列过滤的方法

    Pandas筛选某列过滤的方法

    本文主要介绍了Pandas筛选某列过滤的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 对python中dict和json的区别详解

    对python中dict和json的区别详解

    今天小编就为大家分享一篇对python中dict和json的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Pycharm制作搞怪弹窗的实现代码

    Pycharm制作搞怪弹窗的实现代码

    这篇文章主要介绍了Pycharm制作搞怪弹窗(声音强制最大,屏幕亮度强制最亮,按钮躲避,弹窗炸弹),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Python map和reduce函数用法示例

    Python map和reduce函数用法示例

    这篇文章主要介绍了Python map和reduce函数用法示例,本文给出了两个函数的多个用法示例,需要的朋友可以参考下
    2015-02-02
  • python如何生成各种随机分布图

    python如何生成各种随机分布图

    这篇文章主要为大家详细介绍了python如何生成各种随机分布图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08

最新评论