摘要算法(哈希算法)
- 摘要算法又称哈希算法,它表示输入任意长度的数据,输出固定长度的数据,相同的输入数据始终得到相同的输出,不同的输入数据尽量得到不同的输出。
- 消息摘要算法分为三类
- MD(Message Digest):消息摘要
- 生成的消息摘要都是128位的,包括:MD2,MD4,MD5,从安全性上说:MD5 > MD4 > MD2
- SHA(Secure Hash Algorithm):安全散列
- 包括:SHA-1(160),SHA-2(SHA-224,SHA-256,SHA-384,SHA-512)
- MAC(Message Authentication Code):消息认证码
- 含有密钥的散列函数算法包含了MD和SHA两个系列的消息摘要算法HMAC只是在原有的MD和SHA算法的基础上添加了密钥融合了MD,SHA:
- MD系列:HmacMD2,HmacMD4,HmacMD5SHA系列:HmacSHA1,HmacSHA224,HmacSHA256,HmacSHA38,HmacSHA51
同过hashlib模块实现
import hashlib
md5 = hashlib.md5(b"yang") # 加盐,最好是动态加盐,防止恶意碰撞
data = "hello world"
md5.update(data.encode('utf-8'))
print(md5.hexdigest())
同过hmac模块实现
#hashlib模块实现了sha1,sha224,sha256,sha384,sha512,md5等算法,交易所的加密中一般使用sha256或md5
import os
import hmac
import hashlib
secret_key = b"yang"
random_seq = os.urandom(32)
hmac = hmac.new(secret_key,msg=random_seq,digestmod=hashlib.sha224)#secret_key相当于盐
ret = hmac.digest()
print(ret)
相加一致性
#字符串分开加密相加与单独是一致的
import hashlib
md5 = hashlib.md5() #加盐处
md5.update("hello,yang".encode())
print(md5.hexdigest())
#两次输出的结果是一样的
md5 = hashlib.md5() #加盐处
md5.update("hello".encode())
md5.update(",yang".encode())
print(md5.hexdigest())