Как HMAC функцию в Python? - PullRequest
       53

Как HMAC функцию в Python?

0 голосов
/ 27 февраля 2019

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

Я реализовал 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 голосов
/ 01 марта 2019

Вы можете просто использовать объект hmac в качестве постоянно обновляемой вещи:

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

, и в конце (после того, как у вас есть все данные) вы можете увидеть результат с помощью h.digest() (raw) илиh.hexdigest() (шестнадцатеричная строка) и сравните ожидаемый результат с фактическим, например, Вы можете вызывать его и в каждом блоке, как в примере.

Хеш-объект, который вы используете в своем примере, обновляется длякаждый полученный блок, и не имеет секретной информации (поэтому может быть легко подделан).

0 голосов
/ 27 февраля 2019

Замените ваше яблоко на str(f).encode('utf-8').

Используйте реальный случайный ключ вместо пароля и желательно что-то отличное от SHA-1 (это все еще безопасно для HMAC, но атаки только лучше).

...