Tengo este error:
Traceback (most recent call last):
  File "python_md5_cracker.py", line 27, in <module>
  m.update(line)
TypeError: Unicode-objects must be encoded before hashing
cuando intento ejecutar este código en Python 3.2.2 :
import hashlib, sys
m = hashlib.md5()
hash = ""
hash_file = input("What is the file name in which the hash resides?  ")
wordlist = input("What is your wordlist?  (Enter the file name)  ")
try:
  hashdocument = open(hash_file, "r")
except IOError:
  print("Invalid file.")
  raw_input()
  sys.exit()
else:
  hash = hashdocument.readline()
  hash = hash.replace("\n", "")
try:
  wordlistfile = open(wordlist, "r")
except IOError:
  print("Invalid file.")
  raw_input()
  sys.exit()
else:
  pass
for line in wordlistfile:
  # Flush the buffer (this caused a massive problem when placed 
  # at the beginning of the script, because the buffer kept getting
  # overwritten, thus comparing incorrect hashes)
  m = hashlib.md5()
  line = line.replace("\n", "")
  m.update(line)
  word_hash = m.hexdigest()
  if word_hash == hash:
    print("Collision! The word corresponding to the given hash is", line)
    input()
    sys.exit()
print("The hash given does not correspond to any supplied word in the wordlist.")
input()
sys.exit()
                
                    
                        python
                                python-3.x
                                unicode
                                syntax-error
                                hashlib
                                
                    
                    
                        JohnnyFromBF
fuente
                
                fuente

Respuestas:
Probablemente esté buscando una codificación de caracteres
wordlistfile.O, si está trabajando línea por línea:
fuente
open(wordlist,"r",encoding='utf-8')por qué usar open con codificación específica, la codificación se especifica el códec de decodificación, sin esta opción, utiliza codificación dependiente de la plataforma.Debe tener que definir
encoding formatcomoutf-8, intente esta manera fácil,Este ejemplo genera un número aleatorio usando el algoritmo SHA256:
fuente
Para almacenar la contraseña (PY3):
fuente
El error ya dice lo que tienes que hacer. MD5 funciona en bytes, por lo que debe codificar la cadena Unicode en
bytes, por ejemplo, conline.encode('utf-8').fuente
Por favor, eche un vistazo primero a esa respuesta.
Ahora, el mensaje de error es clara: sólo se puede utilizar bytes, no cadenas de Python (lo que solía ser
unicodeen Python <3), así que hay que codificar las cadenas con su codificación preferida:utf-32,utf-16,utf-8o incluso uno de los restringida 8- codificaciones de bits (lo que algunos podrían llamar páginas de códigos).Python 3 decodifica automáticamente los bytes de su archivo de lista de palabras en Unicode a medida que lee el archivo. Te sugiero que hagas:
para que los datos codificados enviados al algoritmo md5 se codifiquen exactamente como el archivo subyacente.
fuente
fuente
Puede abrir el archivo en modo binario:
fuente
codificar esta línea me lo arregló.
fuente
Si es una cadena de una sola línea. envuélvala con b o B. ej .:
o
fuente
Este programa es la versión mejorada y sin errores del cracker MD5 anterior que lee el archivo que contiene la lista de contraseñas hash y lo compara con palabras hash de la lista de palabras del diccionario de inglés. Espero que sea útil.
Descargué el diccionario de inglés del siguiente enlace https://github.com/dwyl/english-words
fuente