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

2644 篇文章 26 订阅
2330 篇文章 14 订阅

这次我们分享python 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, and shake_256等加密方式。

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

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

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

在这里插入图片描述

软件测试面试文档

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

图片

整套资料获取

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值