2017-01-19 2 views
1

J'essaie de créer un programme python qui lirait les mots d'un dictionnaire, créerait un hachage MD5 et le comparerait à un hachage donné.Pourquoi le hachage md5 d'un mot d'un fichier ne correspond pas au hachage d'une chaîne?

Tout fonctionne bien lorsque je tente de comparer deux hash de mots qui n'ont pas été lus à partir d'un fichier:

if hashlib.md5(b"string").hexdigest() == "b45cffe084dd3d20d928bee85e7b0f21": 
    print("Equal!") 

Mais quand je lis la ligne de mots par ligne à partir d'un fichier, le hachage du le mot est différent. Le code ressemble à ceci:

f = open('short.txt', 'r') 

stringHash = 'b45cffe084dd3d20d928bee85e7b0f21' 

for line in f: 

    if stringHash == hashlib.md5(line.encode('utf_8')).hexdigest(): 
     print("Found it! Password: %s" % line) 

Merci pour toute aide et explication. L'

Répondre

4

l'itérateur de fichier ligne par ligne donne la ligne entière , y compris les terminaisons de ligne.

Dans votre code, vous incluez le terminateur de ligne de la ligne.

line.encode('utf_8').rstrip() donnera le résultat correct.

rstrip() échouera si votre chaîne se termine (intentionnellement) avec des espaces. Dans ce cas, il suffit de faire:

line.encode('utf_8').rstrip('\r\n') 

si le fichier est ouvert dans mode texte sur Unix, possible \r (retour chariot) pourrait rester (pas un problème sur les fenêtres)

(et rstrip-t pas supprimer la chaîne '\ r \ n', mais chaque \r ou/et n contenu à la fin de la ligne, ce n'est pas comme str.split)

+0

Cela a fonctionné! Merci mec! ;) –

+1

vous pouvez accepter la réponse alors: http://stackoverflow.com/help/someone-answers –