摘要算法(哈希算法)

摘要算法(哈希算法)

  • 摘要算法又称哈希算法,它表示输入任意长度的数据,输出固定长度的数据,相同的输入数据始终得到相同的输出,不同的输入数据尽量得到不同的输出。
  • 消息摘要算法分为三类
    • 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())
posted @ 2021-06-07 14:44  小杨的冥想课  阅读(618)  评论(0编辑  收藏  举报