Python Hash HTML Vergleichen?
Hallo,
Ich schreibe gerade ein kleines Programm. ich habe eine HTML Seite und auf der gibt es einen noch statischen login. Ich möchte dass der Login sicher ist und dass das Passwort in einen Hash umgewandelt wird und dann mit dem Hash wie das Passwort welches bspw. in einem Text Dokument ist zu vergleichen.
Nur ändern sich ja die Werte random und mir gelingt es nicht:
Hier der Code von PYTHON:
fileObject = open("C:\\Users\\Nutzer\Music\Auto Generate\Passwort.txt", "r")
data = fileObject.read()
Passcode = "Passwort1234"
text = data
# compute the hash value of text
hash_value = hash(text)
print(hash_value)
text1 = Passcode
# compute the hash value of text
hash_value2 = hash(text1)
print(hash_value2)
Also wie kann ich den Login also das Passwort gescheit prüfen?
3 Antworten
wenn was sicher sein soll sieht das so aus
input vom HTML via POST daten auswertung , daraus ein HASH machen und vergleichen mit einem abgelegten HASH .den eins ist immer klar , nur der user kennt sein passwort , wir kennen nur hashes (einzig einmal die funktion die den passwordhash baut kennt noch das passwort vom user POST input, aber danach sollte es sterben ergo am besten überschreibt man password mit dem rückgabehash ) .
Die hash-Funktion eignet sich m.E. nicht gerade für deinen Anwendungsfall, denn der ihr zugrundeliegende Algorithmus (SipHash) ist schnell berechnet. Schau dir stattdessen bcrypt an.
Diese Bibliothek nutzt einen Hashalgorithmus, der auf Blowfish basiert und daher mehr Rechenaufwand fordert. Mit Bruteforcing würde man also länger brauchen, um den gleichen Hash zu finden.
Zudem stellt die Bibliothek einfache Methoden bereit, um gesalzene Hashes zu generieren und zu prüfen.
Beispiel:
import bcrypt
password = b"qwerty123"
hash = bcrypt.hashpw(password, bcrypt.gensalt())
if bcrypt.checkpw(password, hash):
print("Correct password.")
else:
print("Incorrect password.")
Für deinen Fall sollte das Passwort, welches der Nutzer bei Registration angibt, als Hash gespeichert werden. Wenn der Nutzer versucht, sich anzumelden, suchst du in der Datenquelle nach seinem Nutzernamen (jeder Nutzername sollte eindeutig/einzigartig sein) und liest für diesen den gespeicherten Hash aus. Der wird anschließend via checkpw mit dem eingegebenen Passwort verglichen.
Bei all diesen Prozessen solltest du darauf achten, eine einheitliche Zeichenkodierung (z.B. UTF-8) zu verwenden. Das heißt, für die Webseite solltest du die Zeichenkodierung vorgeben
<!-- inside head: -->
<meta charset="utf-8">
und ebenso beim Speichern/Lesen der Daten sollte die Kodierung stets explizit mit angegeben werden. Für Textdateien könnte dies bspw. so aussehen:
def store_password(password):
hash = bcrypt.hashpw(password.encode("utf8"), bcrypt.gensalt())
with open("password.txt", mode="wb") as file:
file.write(hash)
def check_password(password):
with open("password.txt", mode="rb") as file:
stored_hash = file.read()
return bcrypt.checkpw(password.encode("utf8"), stored_hash))
Gib erstmal die normalen Texte aus - vielleicht hilft das
Was sein kann ist, dass es ein \n oder \r gibt welches auch zum hash dazugenommen wird
\n ist zum Beispiel new line - kannst mal probieren das mit str.rstrip() wegzumachen
Mh habe es probiert geht leider noch nicht...
Vergleich (printe) mal die beiden Texte und schau ob du einen Unterschied erkennst
Was meinst du mit dem n oder r? Ich bin anfänger darum