2012-08-29 20 views
5

Próbuję zbudować cracker md5 do ćwiczeń. Zanim przejdziemy dalej tu jest mój kodu:Jak mogę kodować binarnie ciąg znaków w python?

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 

Mój problem jest z md5_hash_object.update(binascii.a2b_uu(word)). Dokumentacja Python 3 hashlib stwierdza, że ​​ciąg przekazany do update() powinien być w reprezentacji binarnej. Dokumentacja używa m.update(b"Nobody inspects") jako przykładu. W moim kodzie nie mogę po prostu dołączyć b przed zmienną word. Więc starałem się korzystać z biblioteki binascii, ale biblioteka też ma zanotować w dokumentacji treści:

Uwaga

kodowania i dekodowania funkcje nie akceptuje ciągi Unicode. Tylko bytestring i bytearray obiekty mogą być przetwarzane.

Czy ktoś może mi w tym pomóc? Robi się lepiej ode mnie.

+0

uwaga: 'fileinput.input()' może być zbyt wolne w twoim przypadku. Możesz użyć 'md5 (word) .digest()' bez jawnego 'update()'. – jfs

Odpowiedz

8

Musisz podać obiekt bytes, a nie str. Typowy sposób przejścia z str (ciąg znaków Unicode w Pythonie 3) do bytes polega na użyciu metody .encode() na łańcuchu i określeniu kodowania, którego chcesz użyć.

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

Wystarczy zadzwonić pod numer fileinput.input(...,mode='rb'), aby otworzyć pliki w trybie binarnym. Takie pliki tworzą ciągi binarne zamiast ciągów Unicode, gdy pliki są otwierane w trybie tekstowym.

Umożliwia pominięcie niepotrzebnego (niejawnego) dekodowania bajtów odczytanych z dysku, a następnie natychmiastowe zakodowanie ich z powrotem do bajtów za pomocą .encode() przed przekazaniem ich do md5().

+0

To byłoby inne rozwiązanie. W bardziej ogólnym przypadku, wadą jest to, że nie zapewniamy kodowania, z którym pracujesz (ponieważ zależy to od kodowania pliku wejściowego). – Amber

Powiązane problemy