ich stehe vor einem mich sehr verwirrenden Problem und bin auch der Suche nach Hilfe. Im Rahmen einer Webanwendung möchte ich Werte in eine Datenbank abspeichern (keine Passwörter). Um diese vor Veränderung zu schützen ist der Ansatz vor Abspeichern eine Prüfsumme mit einem nur der Applikation bekannten geheimen Schlüssel zu bilden und dieses in einem eigenen Feld abzuspeichern. Bei Lesen des Wertes aus der Datenbank wird erneut die Prüfsumme gebildet und mit der in der Datenbank hinterlegten verglichen. Somit erhalte ich eine Garantie, dass die Inhalte niemand unterwegs verändert hat.
Soviel zur Einleitung. Aktuell arbeite ich mit einer für Passwörtern geeigneten Bibliothek (hashlib). Dabei passiert etwas sehr merkwürdiges. Ich bilde meinen Hashwert so: hash = Hash(values + SECRET) und vergleiche anschließend über die dafür bereitgestellte Funktion Verify(values + SECRET, hash). Das funktioniert Inline total gut! Speichere ich den erzeugten Hashwert allerdings ab und möchte diesen vergleichen, funktioniert es rein zufällig. Entweder habe ich den Hash Algorithmus mit Salt nicht richtig verstanden oder ich mache etwas grundlegend falsch .
Hier mein Code:
Code: Alles auswählen
import json
from passlib.hash import argon2
values = json.dumps({'id': 1, 'unique': 'site1', 'version': 1})
SECRET = b'\x9f/)\x82\x81A\xbd6$\xbd\t\x8d\xcc\xf78\x18\x84_\x91\xd1\xf3\xe5\xfc\x9f\xa7\xf1\x05\x8b\xfbPAR'
hash_neu = argon2.hash(values + str(SECRET))
print(hash_neu)
# ergibt immer true
print(argon2.verify(values + str(SECRET), hash_neu))
alter_hash = '$argon2i$v=19$m=512,t=2,p=2$Oodwbk3pfU/JmfOe8/6/Nw$AWCUk3GrIyAJkYWxwKZGVw'
# ergibt zufällig true/false
print(argon2.verify(values + str(SECRET), alter_hash))
Vielen Dank für Rückmeldung und viele Grüße,
Enrico