2012-08-29 8 views
5

मैं अभ्यास के लिए एक एमडी 5 क्रैकर बनाने की कोशिश कर रहा हूं।मैं अजगर में एक स्ट्रिंग का बाइनरी एन्कोडिंग कैसे कर सकता हूं?

def offline_wordlist_attack(list_path): 
     with fileinput.input(files=(list_path)) as wordlist: 
      for word in wordlist: 
       md5_hash_object = hashlib.md5() # constructing an md5 hash object 
       md5_hash_object.update(binascii.a2b_uu(word)) 
       word_digest = md5_hash_object.digest() # performing the md5 digestion of the word 
       print(word_digest) # Debug 

मेरे मुद्दा md5_hash_object.update(binascii.a2b_uu(word)) साथ है: इससे पहले कि मैं किसी भी आगे यहाँ जाना मेरी कोड है। hashlib पायथन 3 दस्तावेज बताता है कि update() को पारित स्ट्रिंग बाइनरी प्रतिनिधित्व में होनी चाहिए। प्रलेखन उदाहरण के रूप में m.update(b"Nobody inspects") का उपयोग करता है। मेरे कोड में, मैं परिवर्तनीय के सामने b संलग्न नहीं कर सकता। इसलिए मैं binascii लाइब्रेरी का उपयोग करने की कोशिश की, लेकिन वह पुस्तकालय भी, प्रलेखन बताते हुए में एक नोट है:

नोट

एन्कोडिंग और डिकोडिंग कार्यों यूनिकोड तार स्वीकार नहीं करते। केवल बाइटस्ट्रिंग और बाइटरीयर ऑब्जेक्ट्स को संसाधित किया जा सकता है।

क्या कोई इस से मेरी सहायता कर सकता है? यह मेरे लिए बेहतर हो रहा है।

+0

नोट: 'fileinput.input()' आपके मामले में बहुत धीमा हो सकता है। आप 'md5 (word) .digest()' बिना स्पष्ट 'अपडेट() 'का उपयोग कर सकते हैं। – jfs

उत्तर

8

आपको str की बजाय bytes ऑब्जेक्ट में पास करने की आवश्यकता है। str (पायथन 3 में एक यूनिकोड स्ट्रिंग) से bytes पर जाने का सामान्य तरीका स्ट्रिंग पर .encode() विधि का उपयोग करना है और उस एन्कोडिंग को निर्दिष्ट करना है जिसका आप उपयोग करना चाहते हैं।

my_bytes = my_string.encode('utf-8') 
4

बाइनरी मोड में फ़ाइलों को खोलने के लिए बस fileinput.input(...,mode='rb') पर कॉल करें। ऐसी फाइलें यूनिकोड स्ट्रिंग्स के बजाय बाइनरी स्ट्रिंग का उत्पादन करती हैं क्योंकि टेक्स्ट मोड में खोले गए फाइलें होती हैं।

यह आपको डिस्क से पढ़ने वाले बाइट्स के अनावश्यक (निहित) डिकोडिंग को छोड़ने के बाद md5() पर जाने से पहले उन्हें .encode() का उपयोग करके तुरंत बाइट्स पर एन्कोड करने की अनुमति देता है।

+0

यह एक और समाधान होगा। अधिक सामान्य मामले में, हालांकि, यह सुनिश्चित करने का नकारात्मक पक्ष है कि आप किस एन्कोडिंग के साथ काम कर रहे हैं (क्योंकि यह इनपुट फ़ाइल एन्कोडिंग पर निर्भर करता है)। – Amber

संबंधित मुद्दे

 संबंधित मुद्दे