2012-08-29 17 views
5

Estoy tratando de construir un cracker md5 para la práctica. Antes de ir más lejos que aquí está mi código:¿Cómo puedo hacer una codificación binaria de una cadena en 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 

Mi problema es con md5_hash_object.update(binascii.a2b_uu(word)). La documentación de hashlib Python 3 indica que la cadena que se pasa a update() debe estar en representación binaria. La documentación usa m.update(b"Nobody inspects") como ejemplo. En mi código, no puedo simplemente adjuntar b al frente de la variable word. Así que trató de utilizar la biblioteca binascii, pero esa biblioteca también tiene una nota en la documentación que indica:

Nota

de codificación y decodificación de funciones no acepte cadenas Unicode. Solo pueden procesarse bytes y objetos bytearray.

¿Alguien podría ayudarme con esto? Se está poniendo mejor de mí.

+0

nota: 'fileinput.input()' puede ser demasiado lento en su caso. Podría usar 'md5 (word) .digest()' sin explícita 'update()'. – jfs

Respuesta

8

Debe pasar un objeto bytes, en lugar de str. La forma típica de ir desde str (una cadena Unicode en Python 3) hasta bytes es usar el método .encode() en la cadena y especificar la codificación que desea utilizar.

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

Simplemente llame al fileinput.input(...,mode='rb') para abrir archivos en modo binario. Dichos archivos producen cadenas binarias en lugar de cadenas Unicode, como lo hacen los archivos abiertos en modo texto.

Le permite omitir una decodificación innecesaria (implícita) de los bytes leídos del disco, seguido de la codificación inmediata de ellos a los bytes usando .encode() antes de pasarlos a md5().

+0

Esta sería otra solución. En el caso más general, sin embargo, tiene la desventaja de no garantizar con qué codificación estás trabajando (ya que depende de la codificación del archivo de entrada). – Amber

Cuestiones relacionadas