跳转至

MAC

消息验证码

可以确保信息的完整性 防篡改 认证性 防伪装 真实性


HMAC

这是 RFC 2104 的实现, 基于哈希的消息身份验证码, 建议直接使用 HMAC

签名

from cryptography.hazmat.primitives import hashes, hmac

# 加载密钥 SHA256可以更换
h = hmac.HMAC(key, hashes.SHA256())
# 添加信息
h.update(b"message to hash")
# 最终 签名
signature = h.finalize()

认证

from cryptography.hazmat.primitives import hashes, hmac

# 加载密钥
h = hmac.HMAC(key, hashes.SHA256())
# 添加信息
h.update(b"message to hash")
# 认证 签名 如果不正确 抛异常
h.verify(b'签名')

CMAC

方式 RFC 4493 AES-128算法 , CMAC 基于密码的消息认证码

签名

from cryptography.hazmat.primitives import cmac
from cryptography.hazmat.primitives.ciphers import algorithms

# 加载密钥
c = cmac.CMAC(algorithms.AES(key))
# 添加信息
c.update(b"message to authenticate")
# 最终 签名
signature = c.finalize()

认证

from cryptography.hazmat.primitives import cmac
from cryptography.hazmat.primitives.ciphers import algorithms

# 加载密钥
c = cmac.CMAC(algorithms.AES(key))
# 添加信息
c.update(b"message to authenticate")
# 认证 签名 如果不正确 抛异常
c.verify(b'签名')

Poly1305

方式 RFC 7539

签名

from cryptography.hazmat.primitives import poly1305

# 加载密钥
p = poly1305.Poly1305(key)
# 添加信息
p.update(b"message to authenticate")
# 最终 签名
signature = p.finalize()

认证

from cryptography.hazmat.primitives import poly1305

# 加载密钥
p = poly1305.Poly1305(key)
# 添加信息
p.update(b"message to authenticate")
# 认证 签名 如果不正确 抛异常
p.verify(b'签名')