天天看点

Python编程:hashlib模块hmac模块-摘要算法hashlib模块hmac模块Base64模块

摘要算法模块,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'