Ich versuche ein AI-like chatbot zu erstellen, und eine seiner Funktionen ist ein Login. Ich habe den Login-Code vorher benutzt und es funktioniert gut, aber ich habe jetzt Schwierigkeiten mit dem Code, der sich mit dem Hashing der Passwörter beschäftigt. Hier ist der Code:Warum muss ich vor dem Hashing in Python die Codierung deklarieren, und wie kann ich das tun?
import hashlib
...
register = input ("Are you a new user? (y/n) >")
password_file = 'passwords.txt'
if register.lower() == "y":
newusername = input ("What do you want your username to be? >")
newpassword = input ("What do you want your password to be? >")
newpassword = hashlib.sha224(newpassword).hexdigest()
file = open(password_file, "a")
file.write("%s,%s\n" % (newusername, newpassword))
file.close()
elif register.lower() == ("n"):
username = input ("What is your username? >")
password = input ("What is your password? >")
password = hashlib.sha224(password).hexdigest()
print ("Loading...")
with open(password_file) as f:
for line in f:
real_username, real_password = line.strip('\n').split(',')
if username == real_username and password == real_password:
success = True
print ("Login successful!")
#Put stuff here! KKC
if not success:
print("Incorrect login details.")
Und hier ist das Ergebnis, das ich bin immer:
Traceback (most recent call last):
File "<FOLDERSYSTEM>/main.py", line 36, in <module>
newpassword = hashlib.sha224(newpassword).hexdigest()
TypeError: Unicode-objects must be encoded before hashing
Ich habe die Codierung sah ich denke, sollte ich (Latin-1) verwenden und fand die erforderliche Syntax, hinzugefügt, dass in und ich immer noch das gleiche Ergebnis erhalten.
Danke, aber was meinst du mit 'der einzige Benutzer der Hashes'? Das ist ein GitHub-Projekt, also wird es noch funktionieren? Außerdem habe ich das ausprobiert und Registrierung ist in Ordnung, aber wenn ich versuche mich anzumelden gibt es mir: "Traceback (zuletzt letzten Anruf): Datei"/home/pi/Desktop/KittyKatCoder-edison-ai-3ae75b2/main.py ", Zeile 50, in real_username, real_password = Zeile.strip ('\ n'). split (',') ValueError: benötigt mehr als 1 zu entpackenden Wert. –
KittyKatCoder
@KittyKatCoder: sagen Sie teilen diese Passwort-Hashes mit einem anderen System; Wenn dieses System UTF-16 zum Kodieren von Unicode-Text in Bytes verwendet, müssen Sie diese Kodierung anpassen. Ich würde wetten, dass die meisten Systeme UTF-8 verwenden. –
Okay, danke. Was kann ich gegen den Fehler tun? – KittyKatCoder