hashlib模块
hashlib铺垫知识
hash指加密,我们将一串字符串明文加密为密文,使这段密文难以被识别,也无法倒推成明文,这就是加密。
hashlib模块所提供的加密,如我们最常用的md5加密方式,其加密效果就是:传入相同的一段明文,加密后会输出相同的一段密文。
应用场景
而加密常用于密码校验等领域。当我们的密码通过网络传输时,可能会被截取,暴露我们的用户名密码,这十分的不安全,而在密码通过网络传输前,如果将密码的明文加密为密文,这样即使我们的密码密文被截取,也不会造成我们的信息泄露。
也可以用于文件安全性检测,文件一致性检测等,这个在下文中会提及其实现的原理。
常见的加密算法
常见的加密算法有:md5、base64、hmac、sha系列
hashlib模块的使用
基础用法
import hashlib
# 1.得到一个加密器,采取md5的策略加密
hasher = hashlib.md5()
# 2.给加密器 传入明文
hasher.update('我是一串明文字符串'.encode('utf8')) # 明文必须编码成二进制才能被加密
# 3.从加密器 获取密文
cipher = hasher.hexdigest()
print(cipher) # 3d6c18389bc1433e6f1c9ef80d3bceac
这样就成功将一段明文加密成了一段密文。
补充说明
md5具体执行什么算法,我们无从得知,我们只需要掌握:
- 同样的明文被加密后得到的密文是一样的
- 我们无法通过密文得到对应的明文
- md5策略拿到的所有密文长度是固定的
hasher = hashlib.md5()
# 我们不仅可以一次性传入明文 hasher.update('我是一串明文字符串'.encode('utf8'))
# 也可以分段传入明文
hasher.update('我是一串'.encode('utf8'))
hasher.update('明文'.encode('utf8'))
hasher.update('字符串'.encode('utf8'))
cipher2 = hasher.hexdigest()
print(cipher2) # 3d6c18389bc1433e6f1c9ef80d3bceac 与上文中的密文比较别无二致
加盐处理
虽然我们无法通过密文反解明文,但是由于明文只对应一种密文,所以我们可以通过猜很多明文的方式,得到一个明文和密文的对照表,这样一些常见的明文组合就可能被对照表破解出来,这种行为叫做撞库。
所以我们可以选择在明文中添加一些干扰项,来加大撞库的难度,这种方式又被叫做加盐。
import hashlib
hasher = hashlib.md5()
hasher.update('前面加一勺盐'.encode('utf8')) # 前面拼接了一段内容
hasher.update('明文密码'.encode('utf8'))
hasher.update('后面再加一勺盐'.encode('utf8')) # 后面也拼接了一段内容
cipher = hasher.hexdigest()
应用在密码校验时,密码明文夹杂干扰项被翻译成密文存储在服务器的库中,当用户输入密码时,程序会添加相同的干扰项,加密成同样的密文用于校验。
对于想要撞库的人来说,不仅要撞出明文,还要猜测哪部分是盐分。
如果还想更加安全,则可以采取动态加盐的方式。
import hashlib
username = input('username>>:').strip()
password = input('password>>:').strip()
hasher = hashlib.md5()
hasher.update(username[::3].encode('utf8')) # 取用户名的一部分做盐分
hasher.update(password.encode('utf8')) # 密码
cipher = hasher.hexdigest()
print(cipher)
文件安全性\一致性检测
当我们通过网络传输(上传/下载)文件时,文件可能会被添油加醋,一时间无法辨认,如我们下载的软件安装包里被植入木马什么的。
这时我们在传输文件时,先传文件通过加密得到的一小段密文过去,然后文件传输完成后,再次对文件加密得到一段新的密文,这段密文如果与先前传的一致,说明这个文件没有被篡改。
当然如果是比较大的文件,我们对其进行加密,可能会消耗比较多的资源。这时可以取文件的某些部位进行分段加密校验即可,如头尾,中间段各取100个字节进行加密即可,这种策略可以显著提升文件一致性检测的效率。
标签:hashlib,加密,--,明文,模块,密文,encode,hasher From: https://www.cnblogs.com/Leethon-lizhilog/p/16832850.html