【测试开发】python系列教程:hashlib 模块

ゝ一纸荒年。 2023-10-10 20:01 90阅读 0赞

这次我们分享python hashlib 模块


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

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

摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

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

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

那么计算出来的md5就是

  1. d7d8c24cddfb4c15b83db713badda3d3

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

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

最后的结果

  1. 96f4063331ea2c477fb3d7e980d73404

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

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

结果打印

  1. 57488933f9d74f5404533d111cbbf4e4

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

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

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

结果:

  1. abbe3ae3d30736838602e9d119a2dfe016577a07

常用的属性

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

常用方法

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

hashlib的特点

1、摘要算法在很多地方都有广泛的应用。
2、要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改。
3、它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。

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

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

除了上面,我们列举的几个,库里还有

sha224(), sha256(), sha384(), sha512(), blake2b(), blake2s(),sha3_224, sha3_256, sha3_384, sha3_512, shake_128, and shake_256等加密方式。

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

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

最后:下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

在这里插入图片描述

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

图片

整套资料获取

369a983c462d44889b8ad60237393e76.gif

发表评论

表情:
评论列表 (有 0 条评论,90人围观)

还没有评论,来说两句吧...

相关阅读

    相关 hashlib模块

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