अजगर का उपयोग करके स्ट्रिंग का एमडी 5 योग कैसे प्राप्त करें?


262

में फ़्लिकर एपीआई डॉक्स , आप एक स्ट्रिंग के MD5 योग उत्पन्न करने के लिए खोजने की जरूरत है [api_sig]मूल्य।

एक स्ट्रिंग से एक एमडी 5 राशि उत्पन्न करने के बारे में कैसे जाना जाता है?

फ़्लिकर का उदाहरण:

स्ट्रिंग: 000005fab4534d05api_key9a0554259914a86fb9e7eb014e4e5d52permswrite

MD5 योग: a02506b31c1cd46c2e0b6380fb94eb3d

जवाबों:


252

पायथन 2.x के लिए, अजगर के हैशलीब का उपयोग करें

import hashlib
m = hashlib.md5()
m.update("000005fab4534d05api_key9a0554259914a86fb9e7eb014e4e5d52permswrite")
print m.hexdigest()

आउटपुट: a02506b31c1cd46c2e0b6380fb94eb3d


77
उपयोग करने की कोशिश न करें hashlib.md5().update('your string').hexdigest(), यह update()रिटर्न के बाद से काम नहीं करेगा । यदि आप एक पंक्ति समाधान चाहते हैं, तो मार्क लोंगेयर के उत्तर का उपयोग करें।
क्रिस्टोफर मैनिंग

@ChristopherManning m.hexdigest () एक 32 वर्ण लंबा पाचन लौटाता है। 16 वर्णों का लंबा पाचन कैसे प्राप्त करें?
आदिल मलिक

@Darwesh यह 32 अक्षर है क्योंकि यह हेक्स प्रतिनिधित्व है, m.digest_sizeइस कोड के शीर्ष पर, आंतरिक पाचन पहले से ही 16 बाइट्स है।
बारिस डेमीराय

1
@Darwesh आप बस स्ट्रिंगm.hexdigest()[:16]
फेडरेजी

@Darwesh RFC 1321 के अनुसार , md5 हमेशा 16 बाइट्स होता है। अगर आप सिर्फ 16 कैरेक्टर लंबे डाइजेस्ट चाहते हैं, तो आप एक स्लाइस कर सकते हैं जैसा कि बारिस डेमीरे ने कहा।
रयान

569

आप निम्न कार्य कर सकते हैं:

अजगर 2.x

import hashlib
print hashlib.md5("whatever your string is").hexdigest()

अजगर 3.x

import hashlib
print(hashlib.md5("whatever your string is".encode('utf-8')).hexdigest())

हालाँकि इस मामले में आप फ़्लिकर एपीआई के साथ बातचीत के लिए इस मददगार पायथन मॉड्यूल का उपयोग करना शायद बेहतर समझते हैं:

... जो आपके लिए प्रमाणीकरण से निपटेगा।

हैशलीब का आधिकारिक दस्तावेज


मैंने एपीआई देखा। मैं बस उत्सुक था कि मैं इसे किसी भी तरह से कैसे कर सकता हूं। धन्यवाद!
सुपर

1
hexdigest () एक 32 वर्ण लंबा पाचन लौटाता है। 16 वर्णों का लंबा पाचन कैसे प्राप्त करें?
आदिल मलिक

2
अच्छा उत्तर! क्या मैं पूछ सकता हूँ कि पायथन 2 में हमें utf-8 एन्कोडिंग करने की आवश्यकता नहीं है, हालाँकि पाइथन 3 में हमें एन्कोडिंग करने की आवश्यकता है। धन्यवाद। @ मर्क लोंगेयर
जेफ़ हू

3
@ जेफहु, क्योंकि बाइट्स जैसी वस्तु कीhashlib.md5 उम्मीद है
मैक्स

1
पायथन 3 संस्करण का उपयोग पायथन 2 में भी किया जाना चाहिए। @MaxU ने जो कहा, @JeffHu का विस्तार करते हुए, md5 फ़ंक्शन एक बाइटस्ट्रिंग लेता है और अनकोड को स्वीकार नहीं करता है। पायथन 3 (सही ढंग से) सख्त / स्पष्ट है, और इसलिए एक str ( "") यूनिकोड है और इसे एक बाइटस्ट्रिंग से एन्कोड किया जाना है। Python2 में स्ट्रिंग्स की व्याख्या या तो बाइटस्ट्रिंग या यूनिकोड स्ट्रिंग के रूप में की जा सकती है, और एक स्ट्रेट ( "") स्ट्रिंग को पास करके एक बाइटस्ट्रिंग के रूप में व्याख्या की जाती है। यदि स्ट्रिंग में यूनिकोड वर्ण हैं, तो यह अपवाद उत्पन्न करेगा। एक bytestring एन्कोडिंग ascii वर्णों को अछूता छोड़ देगा और यूनिकोड को सही ढंग से रूपांतरित करेगा
चार्ल्स एल।

11

क्या आपने हैशलीब में एमडी 5 कार्यान्वयन का उपयोग करने की कोशिश की है ? ध्यान दें कि हैशिंग एल्गोरिदम आमतौर पर टेक्स्ट डेटा के बजाय बाइनरी डेटा पर कार्य करते हैं , इसलिए आप सावधान रहना चाहते हैं कि हैशिंग से पहले टेक्स्ट से बाइनरी डेटा में परिवर्तित करने के लिए किस वर्ण एन्कोडिंग का उपयोग किया जाता है।

परिणाम हैश का भी बाइनरी डेटा है - ऐसा लगता है कि फ़्लिकर के उदाहरण तो हेक्स एन्कोडिंग का उपयोग पाठ में बदल दिया गया। hexdigestइसे प्राप्त करने के लिए hashalib में फ़ंक्शन का उपयोग करें।


hexdigest () एक 32 वर्ण लंबा पाचन लौटाता है। 16 वर्णों का लंबा पाचन कैसे प्राप्त करें?
आदिल मलिक

1
@ दारवेश: हाँ, एमडी 5 128 बिट्स है, जो कि हेक्स में 32 अक्षर है। यदि आप एक छोटा पाचन चाहते हैं, तो आपको 64-बिट पचाने की आवश्यकता होगी। हालांकि यह बहुत कमजोर होगा ...
जॉन स्कीट



0

आप के साथ कोशिश कर सकते हैं

#python3
import hashlib
rawdata = "put your data here"
sha = hashlib.sha256(str(rawdata).encode("utf-8")).hexdigest() #For Sha256 hash
print(sha)
mdpass = hashlib.md5(str(sha).encode("utf-8")).hexdigest() #For MD5 hash
print(mdpass)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.