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())

मैंने हैश . का आउटपुट संलग्न किया है यहां छवि विवरण दर्ज करें

1
annonymous 27 फरवरी 2019, 10:12

2 जवाब

सबसे बढ़िया उत्तर

अपने सेब को str(f).encode('utf-8') से बदलें।

पासवर्ड के बजाय एक वास्तविक यादृच्छिक कुंजी का उपयोग करें और SHA-1 से अधिमानतः कुछ अलग (यह अभी भी HMAC के लिए सुरक्षित है, लेकिन हमले केवल बेहतर होते हैं)।

1
Maarten Bodewes 27 फरवरी 2019, 16:30

आप लगातार अद्यतन करने वाली चीज़ के रूप में hmac ऑब्जेक्ट का उपयोग कर सकते हैं:

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

और और अंत (आपके पास सभी डेटा होने के बाद) आप परिणाम को h.digest() (कच्चे) या h.hexdigest() (हेक्सिफाइड स्ट्रिंग) के साथ देख सकते हैं और वास्तविक परिणाम के साथ अपेक्षित परिणाम की तुलना कर सकते हैं, उदा। आप इसे हर ब्लॉक पर भी कॉल कर सकते हैं, जैसा कि आप उदाहरण में करते हैं।

आपके उदाहरण में उपयोग की जाने वाली हैश ऑब्जेक्ट प्रत्येक प्राप्त ब्लॉक के लिए रीफ्रेश होती है, और इसमें कोई गुप्त जानकारी नहीं होती है (इसलिए आसानी से धोखा दिया जा सकता है)।

0
Henno Brandsma 1 मार्च 2019, 18:58