python——hashlib模块

本文深入解析了多种哈希算法,包括MD5、SHA系列、BLAKE2等,探讨了它们在文件校验、密码安全等方面的应用。介绍了哈希算法的特点、碰撞概念及如何通过加盐增强安全性。

提供多种哈希算法的模块。

哈希算法:又叫摘要算法,是一种给定输入计算出一种特殊的结果。哈希算法不可逆,比如输入一串字符串,输出一串奇怪的字符串,无法根据输出反向算出输入(除了暴力穷举破解)。

哈希算法可以用于校验文件一致性,对多个文件使用相同的哈希算法,若得到的结果相同,则表示文件完全相同,没有丢失或修改数据。

哈希算法有如下:
md5
sha1,sha224, sha256, sha384, sha512,
blake2b, blake2s
sha3_224, sha3_256, sha3_384, sha3_512
shake_128, shake_256……

在该模块中,以上算法都是类,可以调用产生相应的hash对象。

其中md5和sha1较常见,但是都可能发生碰撞。sha384 和sha512 在32位的平台上会较慢。
碰撞:不同的输入产生了相同的Hash结果。

该模块产生的hash对象具有以下四种方法

-update(data):对输入字节更新哈希对象。更新不是替换,重复调用和将所有输入字符串拼起来一次性调用,产生相同结果。
-digest():返回update方法中输入的hash结果,为bytes对象。
-hexdigest():与digest()类似,但是仅包含十六进制数字,长度是digest结果的两倍。
-copy():复制哈希对象并返回,可用于计算公共初始子字符串的数据hash结果。

用法举例

上文中已列举出了hashlib模块中的类(哈希算法),因为这些类的使用方法相同,下文仅以md5算法作为示例。

注意:若输入字符串,需要编码。因为字符串是unicode对象,无法直接使用哈希算法!在字符串前加上b,将该字符串类型转为bytes类型,等价于使用‘utf-8’编码。

import hashlib
password= hashlib.md5()
password.update(b"abcdef123")   #即:'abcdef123'.encode('utf-8')
password.digest()     #b'\xaa|\x9c\x12\xfct\tU\xefM\xfa\xd6p%\x0f\xf4'
password.update(b"xyz")   #和password.update(b"abcdef123xyz")产生的hash对象相同

#也可以用如下方法直接输入文本
password=hashlib.md5('abcdef123'.encode('gbk'))    #字符串输入时需要编码
password.hexdigest()  #aa7c9c12fc740955ef4dfad670250ff4      32位
password.digest()     #b'\xaa|\x9c\x12\xfct\tU\xefM\xfa\xd6p%\x0f\xf4'    16位

由以上输出可知,相同字符串编码方式不同,使用相同的hash算法产生的对象相同。

使用哈希算法时,对密码加盐是一种加强安全性的手段,可以防止暴力破解明文密码。

import hashlib
password='abcdef123'   #原密码
salt='tgrcxn'   
salted_password=password+salt
hashlib.md5(salted_password.encode('ascii')).hexdigest()  #对加盐的密码获得hash对象
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值