J'ai cette erreur:
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
lorsque j'essaie d'exécuter ce code 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
la source
la source
Réponses:
Il recherche probablement un codage de caractères à partir de
wordlistfile
.Ou, si vous travaillez ligne par ligne:
la source
open(wordlist,"r",encoding='utf-8')
pourquoi utiliser open avec un codage spécifique, le codage est spécifié le codec de décodage, sans cette option, il utilise un codage dépendant de la plate-forme.Vous devez avoir à définir
encoding format
commeutf-8
, Essayez cette méthode simple,Cet exemple génère un nombre aléatoire à l'aide de l'algorithme SHA256:
la source
Pour enregistrer le mot de passe (PY3):
la source
L'erreur indique déjà ce que vous devez faire. MD5 fonctionne sur octets, vous devez donc encoder la chaîne Unicode en
bytes
, par exemple avecline.encode('utf-8')
.la source
Veuillez d'abord regarder cette réponse.
Maintenant, le message d'erreur est clair: vous ne pouvez utiliser octets, et non pas des chaînes Python (ce qui était
unicode
en Python <3), de sorte que vous devez encoder les chaînes avec l' encodage préféré:utf-32
,utf-16
,utf-8
ou même l' un des restreint 8- codages de bits (ce que certains pourraient appeler des pages de codes).Les octets de votre fichier de liste de mots sont automatiquement décodés en Unicode par Python 3 lorsque vous lisez le fichier. Je vous suggère de faire:
afin que les données encodées poussées vers l'algorithme md5 soient encodées exactement comme le fichier sous-jacent.
la source
la source
Vous pouvez ouvrir le fichier en mode binaire:
la source
encoder cette ligne l'a corrigé pour moi.
la source
S'il s'agit d'une chaîne d'une seule ligne. enveloppez-le avec b ou B. Par exemple:
ou
la source
Ce programme est la version sans bug et améliorée du cracker MD5 ci-dessus qui lit le fichier contenant la liste des mots de passe hachés et le vérifie par rapport au mot haché de la liste de mots du dictionnaire anglais. J'espère que c'est utile.
J'ai téléchargé le dictionnaire anglais à partir du lien suivant https://github.com/dwyl/english-words
la source