Python Hash HTML Vergleichen?

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


asfjaslas 
Fragesteller
 07.03.2022, 21:22

Was meinst du mit dem n oder r? Ich bin anfänger darum

0