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