Nachricht für neue Nutzer.
Nachricht für engagierte Nutzer.
Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung: Unterschied zwischen den Versionen
Aus ZUM-Unterrichten
KKeine Bearbeitungszusammenfassung Markierung: Quelltext-Bearbeitung 2017 |
KKeine Bearbeitungszusammenfassung Markierung: Quelltext-Bearbeitung 2017 |
||
| Zeile 14: | Zeile 14: | ||
Beispielcode | Beispielcode | ||
{{ | {{code|lang=python|def teil1_neuer_eintrag(dateipfad): | ||
benutzer = input("Benutzername: ") | benutzer = input("Benutzername: ") | ||
passwort = input("Passwort: ") | passwort = input("Passwort: ") | ||
| Zeile 21: | Zeile 21: | ||
file.write(eintrag) | file.write(eintrag) | ||
print("Eintrag gespeichert.") | print("Eintrag gespeichert.") | ||
}} | |||
| Zeile 39: | Zeile 39: | ||
Beispielcode | Beispielcode | ||
{{ | {{code|lang=python|import re | ||
def pruefe_passwort(pw): | def pruefe_passwort(pw): | ||
| Zeile 62: | Zeile 62: | ||
ok, meldung = pruefe_passwort(pw) | ok, meldung = pruefe_passwort(pw) | ||
print(meldung) | print(meldung) | ||
}} | |||
| Zeile 75: | Zeile 75: | ||
* Für echte Anwendungen werden heute stärkere Verfahren (z. B. SHA-256, bcrypt) empfohlen. | * Für echte Anwendungen werden heute stärkere Verfahren (z. B. SHA-256, bcrypt) empfohlen. | ||
MD5 in Python | MD5 in Python | ||
{{ | {{code|lang=python|import hashlib | ||
def md5_hash(pw): | def md5_hash(pw): | ||
hasher = hashlib.md5() | hasher = hashlib.md5() | ||
| Zeile 95: | Zeile 95: | ||
f.write(eintrag) | f.write(eintrag) | ||
print("Benutzer und Hash gespeichert.") | print("Benutzer und Hash gespeichert.") | ||
}} | |||
| Zeile 103: | Zeile 103: | ||
Beispielcode | Beispielcode | ||
{{ | {{code|lang=python|def lade_passwortdatei(dateipfad): | ||
daten = {} | daten = {} | ||
with open(dateipfad, "r", encoding="utf-8") as f: | with open(dateipfad, "r", encoding="utf-8") as f: | ||
| Zeile 126: | Zeile 126: | ||
# Beispielaufruf | # Beispielaufruf | ||
login_pruefung("passwoerter.txt") | login_pruefung("passwoerter.txt") | ||
}} | |||
Version vom 7. Januar 2026, 20:12 Uhr
Python-Übungsaufgabe:
Verwaltung von Benutzernamen und Passwörtern
Teil 1: Manuelle Eingabe und Dateispeicherung
Lernziel Schüler lernen, wie man Benutzernamen und Passwörter per Konsole abfragt, in einer Datei speichert und grundlegende Dateizugriffe in Python nutzt.
Wichtige Hinweise zu Dateizugriffen
- Beim Lesen/Schreiben von Dateien sollte stets ein Context Manager (with open(...) as f:) verwendet werden.
- Verwende den Modus "a" (append) zum Hinzufügen neuer Einträge, ohne vorhandene zu überschreiben.
- Achte auf Zeichencodierung (z. B. encoding="utf-8"), um Umlaute oder Sonderzeichen korrekt abzulegen.
- Sensible Daten niemals in öffentlich einsehbaren Dateien ablegen.
Beispielcode
Teil 2: Passwortregeln prüfen
Lernziel Schüler implementieren eine Funktion, die Passwörter gegen aktuelle Sicherheitsstandards validiert.
Vorgeschlagene Regeln
- Mindestens 12 Zeichen Länge
- Mindestens ein Großbuchstabe
- Mindestens ein Kleinbuchstabe
- Mindestens eine Ziffer
- Mindestens ein Sonderzeichen (!@#$%^&*()_+-=[]{};:,.<>/?)
- Keine Leerzeichen
- Keine Wiederholungen (z. B. “aaa”, “111”)
Beispielcode
Teil 3: Hash-Verfahren und MD5
Lernziel Schüler verstehen, was Hash-Funktionen sind und wie man MD5 in Python anwendet.
Allgemeines zu Hash-Verfahren
- Hash-Funktionen wandeln Eingaben beliebiger Länge in eine fixe Bitfolge um.
- Sie sind Einbahn: aus dem Hash kann man normalerweise nicht das Originalpasswort rekonstruieren.
- Kollisionen (zwei Eingaben mit demselben Hash) sind unerwünscht, treten aber teilweise auf.
- Für echte Anwendungen werden heute stärkere Verfahren (z. B. SHA-256, bcrypt) empfohlen.
MD5 in Python Vorlage:Code
Teil 4: Passwortprüfung bei bestehendem Benutzer
Lernziel Schüler erweitern ihr Programm um eine Login-Funktion: Eingabe von Benutzername und Passwort wird gegen die gespeicherten MD5-Hashes geprüft.
Beispielcode Vorlage:Code
Weiterführende Anregungen
- Salted Hashes einführen: Für jeden Benutzer einen zufälligen Salt vor dem Hashen nutzen.
- Bessere Algorithmen einsetzen: z. B. hashlib.sha256, bcrypt oder scrypt.
- Verwaltung in einer SQLite-Datenbank statt in einer Textdatei.
- Zwei-Faktor-Authentifizierung (2FA) simulieren.
- Passwort-Blacklist implementieren, um häufige Passwörter zu verbieten.
