2017-09-06 4 views
1

Je suis tout à fait un nouveau venu à Python et je suis coincé dans la situation suivante:Python n'acceptera deux mêmes chaînes que la même

Je veux hash un mot de passe et de le comparer avec le masterhash. Malheureusement Python ne les accepte pas comme le même:

import hashlib 
h=hashlib.sha512() 
username='admin' 
username=username.encode('utf-8') 
h.update(username) 
hexdigest=h.hexdigest() 
hlist=open("database.txt")#masterhash 
lines=hlist.readlines() 
userhash=lines[0]#masterhash in line 0 
if userhash == hexdigest: # it doesent accept them as the same 
     text = "True" 
else: 
     text="False" 

Je l'ai déjà vérifié les objectypes: à la fois la chaîne

Le hachage, les deux fois:

c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec

I ne comprends vraiment pas le problème.

+0

oui c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec – loekarbona

Répondre

1

Le problème est cette ligne:

lines = hlist.readlines() 

Chaque valeur dans cette liste aura une nouvelle ligne de fuite (que vous pouvez ne pas remarquer quand print ING). Assurez-vous de strip cela off.

userhash = lines[0].strip() 
+0

merci beaucoup – loekarbona

0

readlines() renvoie les lignes avec des retours à la ligne à leurs extrémités. Vous comparez "A" avec "A \ n". Essayez ceci:

if userhash.strip() == hexdigest 
+0

merci beaucoup – loekarbona

0

Lorsque vous utilisez readlines() vous obtenez une liste des lignes avec le caractère de nouvelle ligne à la fin de chaque ligne, vous pouvez faire l'une des deux options:

Option n ° 1:

lines = hlist.readlines() 
userhash = lines[0].rstrip() 

Option # 2:

lines = hlist.read().splitlines() 
userhash = lines[0] 
+0

merci beaucoup – loekarbona