如何对 Python 中的函数进行 HMAC?

How to HMAC a function in Python?

可以使用以下代码将HMAC应用于字符串

import hmac
import hashlib
digest_maker=hmac.new(b'secret key',b'apple',hashlib.sha1)
digest=digest_maker.hexdigest()
print(digest)

但是我想为这样的东西实现 HMAC

f=dev.recv()

此处dev.recv()将连续接收CAN报文,存储在f中。存储在 f 中的值必须是 HMACed

我已经为相同的场景实现了哈希。同样的场景我想实现HMAC

from canard import can
from canard.hw import socketcan
import hashlib
dev=socketcan.SocketCanDev("slcan0")
dev.start()
while True:
  f=dev.recv()
  hash_object = hashlib.sha256(str(f).encode('utf-8'))
  print('Hash', hash_object.hexdigest())

我附上了哈希的输出

str(f).encode('utf-8') 替换你的苹果。

使用真正的随机密钥而不是密码,最好使用不同于 SHA-1 的密钥(它对 HMAC 仍然安全,但攻击只会变得更好)。

您可以将 hmac 对象用作持续更新的对象:

h=hmac.new(b'secret key',None, hashlib.sha256)
while True:
    f=dev.recv()
    h.update(f)

and 和结尾(在您拥有所有数据之后)您可以使用 h.digest()(原始)或 h.hexdigest()(十六进制字符串)查看结果并将预期结果与实际结果进行比较,例如您也可以在每个块中调用它,就像您在示例中所做的那样。

您在示例中使用的哈希对象会为每个接收到的块刷新,并且没有秘密信息(因此很容易被欺骗)。