Eu tenho este erro:
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
quando tento executar esse código no 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
fonte
fonte
Respostas:
Provavelmente, está procurando uma codificação de caracteres
wordlistfile
.Ou, se você estiver trabalhando linha por linha:
fonte
open(wordlist,"r",encoding='utf-8')
Por que usar aberto com codificação específica, a codificação é especificada no codec de decodificação; sem essa opção, ele usa codificação dependente da plataforma.Você deve definir
encoding format
comoutf-8
, tente desta maneira fácil,Este exemplo gera um número aleatório usando o algoritmo SHA256:
fonte
Para armazenar a senha (PY3):
fonte
O erro já diz o que você deve fazer. O MD5 opera em bytes, então você deve codificar a cadeia Unicode em
bytes
, por exemplo, comline.encode('utf-8')
.fonte
Por favor, dê uma olhada primeiro nessa resposta.
Agora, a mensagem de erro é clara: você só pode usar bytes, não cordas Python (o que costumava ser
unicode
em Python <3), então você tem que codificar as cordas com a sua codificação preferida:utf-32
,utf-16
,utf-8
ou até mesmo um dos restrita 8- codificações de bits (o que alguns chamam de páginas de código).Os bytes no seu arquivo de lista de palavras estão sendo automaticamente decodificados para Unicode pelo Python 3 conforme você lê o arquivo. Eu sugiro que você faça:
para que os dados codificados enviados ao algoritmo MD5 sejam codificados exatamente como o arquivo subjacente.
fonte
fonte
Você pode abrir o arquivo no modo binário:
fonte
codificar esta linha corrigiu para mim.
fonte
Se é uma string de linha única. envolva-o com b ou B. por exemplo:
ou
fonte
Este programa é a versão aprimorada e sem erros do cracker MD5 acima, que lê o arquivo que contém a lista de senhas com hash e verifica a palavra com hash na lista de palavras do dicionário em inglês. Espero que seja útil.
Eu baixei o dicionário de inglês no link a seguir https://github.com/dwyl/english-words
fonte