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 format
comoutf-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
unicode
en Python <3), así que hay que codificar las cadenas con su codificación preferida:utf-32
,utf-16
,utf-8
o 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