hash - Python vs Go Hashing Differences -
मेरे पास एक प्रोग्राम है
पैकेज मुख्य आयात ("crypto / hmac" "crypto / SHA1 "" fmt ") समारोह मुख्य () {वैल: = [] बाइट (" nJ1m4Cc3 ") क़मी बनाने की मशीन: = hmac.New (sha1.New, वैल) fmt.Printf ("% x \ n ", hasher.Sum (शून्य)) // f7c0aebfb7db2c15f1945a6b7b5286d173df894d} और एक अजगर (2.7) कार्यक्रम जाओ कोड पुन: पेश करने के प्रयास में है कि (का उपयोग कर क्रिप्टो / HMAC )
<कोड> आयात hashlib वैल = u'nJ1m4Cc3 'hasher = hashlib.new ( "SHA1", वैल) प्रिंट hasher.hexdigest () # d67c1f445987c52bceb8d6475c30a8b0e9a3365d<कोड
का उपयोग करना > HMAC मॉड्यूल मुझे एक अलग परिणाम नहीं जाओ कोड के रूप में ही देता है, लेकिन अभी भी।
आयात HMAC वैल = 'nJ1m4Cc3' एच = hmac.new ( "SHA1", वैल ) प्रिंट h.hexdigest () # d34435851209e463deeeb40cba7b75ef क्यों इन विभिन्न मूल्यों मुद्रित जब वे एक ही इनपुट पर एक ही हैश का उपयोग करें? करना
आपको यह सुनिश्चित करना है कि
- दोनों परिदृश्यों में इनपुट बराबर है और
- दोनों स्थितियों में प्रोसेसिंग विधि समकक्ष है।
दोनों ही मामलों में, इनपुट एक ही बाइनरी ब्लॉब होना चाहिए। अपने पायथन कार्यक्रम में आप एक यूनिकोड वस्तु को परिभाषित करते हैं, और आप इसके द्विआधारी प्रतिनिधित्व का नियंत्रण नहीं लेते हैं। u को b के साथ उपसर्ग बदलें, और आप ठीक हैं (यह पायथन 2.7 और 3 में एक बाइट क्रम को परिभाषित करने का स्पष्ट तरीका है)। यह वास्तविक समस्या नहीं है, लेकिन बेहतर यहाँ स्पष्ट है।
समस्या यह है कि आप अपने गो और पायथन लागूकरण में विभिन्न तरीकों को लागू करते हैं।
दिए गए कि अजगर संदर्भ
में है, कोई भी "crypto / hmac" आयात करने की आवश्यकता नहीं है, पायथन में आप बस अपने डेटा के SHA1 हैश का निर्माण करते हैं जाओ में, बराबर होगा:
पैकेज मुख्य आयात ( "क्रिप्टो / SHA1" "fmt") समारोह मुख्य () {डेटा: = [] बाइट ( "nJ1m4Cc3") fmt.Printf ("% X", sha1.Sum (डेटा))} टेस्ट और आउटपुट:
go run hashit.go d67c1f445987c52bceb8d6475c30a8b0e9a3365d< / Pre>यह आपके पहले पायथन स्निपेट का निर्माण करता है।
संपादित करें: मैंने गौ कोड को थोड़ा सा सरल बनाया है, पायथन को और अधिक सुरुचिपूर्ण बनाने के लिए नहीं किया है जाओ यहां बहुत खूबसूरत है, यहां तक कि: -)।
यह देखते हुए कि जाओ संदर्भ है
आयात hmac आयात हैशिप डेटा है = b'nJ1m4cc3 'h = hmac.new ( कुंजी = डेटा, डाइजेस्टमोड = हैशिलिब.शा 1) प्रिंट एच। हेक्सडगेस्ट ()टेस्ट & amp; आउटपुट:
<पूर्व>अजगर हैशटैप f7c0aebfb7db2c15f1945a6b7b5286d173df894d
यह आपके जा स्निपेट का निर्माण करता है हालांकि मैं एक एचएमएसी के क्रिप्टोग्राफिक महत्व के बारे में सुनिश्चित नहीं हूं, जब कोई खाली संदेश का उपयोग करता है।
Comments
Post a Comment