1、应用场景
hashlib
库在Python中常用于数据加密和数据完整性校验。以下是一些具体的应用场景:
- 密码存储:为了安全起见,系统通常不会直接存储用户的明文密码,而是存储其哈希值。当用户输入密码进行验证时,系统会将输入的密码进行哈希处理,然后与存储的哈希值对比。
- 文件校验:哈希函数可以生成文件的唯一哈希值,通过比较文件的哈希值,可以快速检查文件是否被篡改。
- 数据去重:在处理大量数据时,可以使用哈希函数对数据进行处理,生成的哈希值相同的数据可以被视为重复数据,从而实现数据去重。
- 数据检索:哈希表是一种常用的数据结构,它通过哈希函数将键映射到表的一个位置以加快查找速度。
- 数字签名:在信息安全领域,哈希函数也被用于生成数字签名,以验证数据的完整性和真实性。
- 区块链技术:在区块链技术中,哈希函数被用于生成每个区块的哈希值,用于确保区块链的安全和一致性。
2、hashlib-标准库
hashlib是Python的标准库,它提供了一系列的算法,如MD5,SHA1,SHA224,SHA256,SHA384,SHA512等,用于在Python中生成散列值。
Python的hashlib
库提供了一系列的散列函数。以下是该库的一些主要方法:
hashlib.new(name, data=None)
: 这个方法用于创建一个新的hash对象。hashlib.md5(data=None)
: 创建一个新的md5 hash对象。hashlib.sha1(data=None)
: 创建一个新的sha1 hash对象。hashlib.sha224(data=None)
: 创建一个新的sha224 hash对象。hashlib.sha256(data=None)
: 创建一个新的sha256 hash对象。hashlib.sha384(data=None)
: 创建一个新的sha384 hash对象。hashlib.sha512(data=None)
: 创建一个新的sha512 hash对象。hashlib.sha3_224(data=None)
: 创建一个新的sha3_224 hash对象。hashlib.sha3_256(data=None)
: 创建一个新的sha3_256 hash对象。hashlib.sha3_384(data=None)
: 创建一个新的sha3_384 hash对象。hashlib.sha3_512(data=None)
: 创建一个新的sha3_512 hash对象。
以上每个方法都可以接收一个可选的字节数据,并返回一个相应的hash对象。这些对象有如下方法:
update(data)
: 更新hash对象的散列值。digest()
: 返回散列结果的字节表示。hexdigest()
: 返回散列结果的十六进制字符串表示。copy()
: 返回当前hash对象的一个复制,可以用于更新hash值的计算。
以上就是hashlib
库的主要方法。
以下是一些使用Python hashlib
库的示例:
- 使用
md5
散列:
import hashlib
m = hashlib.md5()
m.update(b"Hello, world!")
print(m.hexdigest())
- 使用
sha256
散列:
import hashlib
s = hashlib.sha256()
s.update(b"Hello, world!")
print(s.hexdigest())
- 使用
update
方法进行多次更新:
import hashlib
m = hashlib.md5()
m.update(b"Hello, ")
m.update(b"world!")
print(m.hexdigest())
- 使用
digest
方法获取字节表示:
import hashlib
m = hashlib.md5()
m.update(b"Hello, world!")
print(m.digest())
- 使用
copy
方法复制hash对象:
import hashlib
m = hashlib.md5()
m.update(b"Hello, ")
n = m.copy()
m.update(b"world!")
n.update(b"AI!")
print("m: ", m.hexdigest())
print("n: ", n.hexdigest())
以上就是一些使用Python hashlib
库的示例。
在Python的hashlib
库中,m.update(b"hello")
是用来更新hash对象m
的散列值的。
这里的b"hello"
是一个字节字符串。在Python中,字符串前面的b
表示该字符串是字节类型的。字节字符串在很多处理二进制数据和与C语言库交互的场景中是必需的。
update
方法接收一个字节字符串参数,并用它来更新hash对象的当前散列值。这个方法可以被多次调用以连续更新散列值。
例如:
import hashlib
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/1c4139bf34d64c94f87c0e0f1fef0d51.png)
![img](https://img-blog.csdnimg.cn/img_convert/407fe82060618b27d46c7f4dc093c598.png)
![img](https://img-blog.csdnimg.cn/img_convert/46506ae54be168b93cf63939786134ca.png)
![img](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)
![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)
![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**
零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**
<img src="https://img-community.csdnimg.cn/images/fd6ebf0d450a4dbea7428752dc7ffd34.jpg" alt="img" style="zoom:50%;" />