如何在Python中使用HMAC函数?

时间:2019-02-27 07:12:26

标签: cryptography hmac can-bus

可以使用以下代码将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()将连续接收将存储在f中的CAN消息。存储在f中的值必须进行HMACed

我已经针对相同的场景实现了Hash。我想针对同一场景实施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())

我已经附加了Hash的输出 enter image description here

2 个答案:

答案 0 :(得分:0)

ABxBxBACxCADBCAxADA 代替苹果。

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

答案 1 :(得分:0)

您可以仅将hmac对象用作不断更新的对象:

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

,最后(在获得所有数据之后)可以用h.digest()(原始)或h.hexdigest()(十六进制字符串)查看结果,并将预期结果与实际结果进行比较,例如您也可以像示例中一样在每个块上调用它。

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