摘要算法模块,hashlib
碰撞:把无限多的数据集合映射到一个有限的集合中
要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改,但是它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。
对原始口令加一个复杂字符串来实现,俗称“加盐”:加salt算法
通过彩虹表根据哈希值反推原始口令
hashlib模块
import hashlib # md5 m = hashlib.md5() m.update(b"admin") print(m.hexdigest()) # 21232f297a57a5a743894a0e4a801fc3 m1 = hashlib.md5() m1.update("试试中文行不行".encode("utf-8")) print(m1.hexdigest()) # dede62a39baa08cbe71bad709603b917 # 简单写法 s = "i love you" ret = hashlib.md5(s.encode("utf-8")).hexdigest() print(ret) # 459b9511a7f650ebd327889c45cc4e9b print(len("459b9511a7f650ebd327889c45cc4e9b")) # 32 # sha1 ret = hashlib.sha1(s.encode("utf-8")).hexdigest() print(ret) # bb7b1901d99e8b26bb91d2debdb7d7f24b3158cf print(len("bb7b1901d99e8b26bb91d2debdb7d7f24b3158cf")) # 40 # sha256 s = hashlib.sha256() s.update(b"admin") print(s.hexdigest()) # 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
hmac模块
import hmac h = hmac.new(b"123456") # key h.update(b"admin") # vlaue print(h.hexdigest()) # 20238ad293024e2ea2f505db927cd52e # 加盐salt message = b"hello world" salt = b"secret" ret = hmac.new(key=salt, msg=message, digestmod="md5").hexdigest() print(ret) # 78d6997b1230f38e59b6d1642dfaa3a4
Base64模块
是一种用64个字符来表示任意二进制数据的方法
import base64 ret = base64.b64encode(b"afsdfsdfsfasdf") print(ret) # b'YWZzZGZzZGZzZmFzZGY=' ret = base64.b64decode(b'YWZzZGY=') print(ret) # b'afsdf'