J'utilise Python 3.5 et quand j'utilise hashlib.md5(), une valeur différente est renvoyée d'une base de données que lorsqu'une chaîne est hachée à l'extérieur.Lors de l'utilisation de hashlib en Python, une valeur différente est retournée à partir d'une base de données
Le code J'utilise:
self.m = hashlib.md5()
self.m.update(self.password.encode('utf-8'))
self.passCheck = self.m.digest()
Ce processus, lors de l'utilisation 'user1pass' comme un mot de passe retours:
b' \xa0\xdbS\xbc\x18\x81\xa7\xf79\xcd\x95kt\x009'
Cependant, quand je vais chercher à partir d'une base de données:
self.cur.execute("SELECT Username, Password FROM Users WHERE Username = ?;", username)
self.userFindings = self.cur.fetchall()
self.userDetails = []
for each in self.userFindings:
self.userDetails.append(list(each))
return self.userDetails
self.userDétails dans ce cas ressemble à ceci:
[['user1', "b' \\xa0\\xdbS\\xbc\\x18\\x81\\xa7\\xf79\\xcd\\x95kt\\x009'"]]
D'une certaine manière dans le processus, les barres obliques ont été doublées, ce qui signifie qu'elles ne peuvent pas être comparées correctement. Quelqu'un a une idée de ce qui a causé ça?
EDIT: Photo de sortie
Output of self.passCheck and self.userDetails
Il semble que vous mettez 'repr 'de la chaîne de hachage dans la base de données, au lieu de la valeur elle-même. – 9000
@Anthon: le problème réside dans des guillemets qui rendent les barres obliques littérales: '" b '\ xa0 \ xdbS \ xbc \ x18 \ x81 \ xa7 \ xf79 \ xcd \ x95kt \ x009' "'. (Il m'a fallu du temps pour comprendre ce qui ne va pas.) – 9000
Vous avez inséré des barres obliques inverses ('\') pendant l'édition, pas des barres obliques ('/'). Cela ne devrait pas être nécessaire. Je suppose que l'OP a copié et collé ce qu'il y avait sur l'écran. – Anthon