Comment corriger TypeError: Unicode-les objets doivent être codées avant le hachage?
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 dans 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()
- J'ai trouvé l'ouverture d'un fichier avec " rb " a contribué à mon cas.
Vous devez vous connecter pour publier un commentaire.
C'est probablement à la recherche d'un codage de caractères à partir de
wordlistfile
.Ou, si vous travaillez sur une ligne-par-ligne de base:
open(wordlist,"r",encoding='utf-8')
pourquoi utiliser de l'ouvrir avec un codage spécifique, l'encodage est spécifié, le décodage du codec, sans cette option, l'utilisation dépend de la plateforme d'encodage.Vous devez avoir à définir
encoding format
commeutf-8
,Essayez de cette façon facile,
Cet exemple génère un nombre aléatoire à l'aide de l'algorithme SHA256:
Pour stocker le mot de passe (PY3):
L'erreur déjà dit ce que vous avez à faire. MD5 fonctionne sur des octets, de sorte que vous devez coder chaîne Unicode en
bytes
, par exemple, avecline.encode('utf-8')
.Veuillez prendre un coup d'oeil d'abord à que réponse.
Maintenant, le message d'erreur est clair: vous ne pouvez utiliser que des octets, pas Python cordes (ce qui
unicode
en Python < 3), de sorte que vous devez coder les chaînes de votre choix à l'encodage:utf-32
,utf-16
,utf-8
ou même l'un de l'limité à 8 bits codages (ce que certains pourraient appeler les codes).Les octets dans votre liste de mots de fichier sont automatiquement décodé en Unicode par Python 3 comme vous le lire à partir du fichier. Je vous suggère de faire:
de sorte que les données codées poussé à l'algorithme md5 sont codés exactement comme le fichier sous-jacent.
Vous pouvez ouvrir le fichier en mode binaire:
codant pour cette ligne fixe pour moi.
Ce programme est le bug, et une version améliorée de la ci-dessus MD5 cracker qui lit le fichier contenant la liste des mots de passe hachés et vérifie l'encontre haché mot du dictionnaire anglais liste de mots. J'espère que c'est utile.
J'ai téléchargé le dictionnaire de la langue anglaise à partir du lien suivant
https://github.com/dwyl/english-words