Translate project documentation from English to German for better accessibility. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
4.4 KiB
CLAUDE.md
Diese Datei bietet Anleitungen für Claude Code (claude.ai/code) bei der Arbeit mit Code in diesem Repository.
Projektübersicht
Dies ist ein Python PBKDF2 Passwort-Hashing-Tool mit zwei Implementierungen:
salt.py: Referenzimplementierung mit CLI, die sowohlhashals auchverifyUnterbefehle unterstützt, plus eine Abkürzung, bei derpython3 salt.py <password>automatisch den hash-Befehl aufruftsalt2.py: Alternative CLI, die aussalt.pyimportiert und explizite Unterbefehle erfordert (generateundverify)
Beide Implementierungen verwenden PBKDF2-HMAC-SHA256 mit konfigurierbarer Iterationsanzahl (Standard: 200.000, überschreibbar über die Umgebungsvariable PBKDF2_ITERATIONS).
Häufige Befehle
CLI ausführen
# Passwort hashen (salt.py unterstützt Abkürzungssyntax)
python3 salt.py "MeinPasswort"
python3 salt.py hash "MeinPasswort"
# Passwort verifizieren
python3 salt.py verify <passwort> <salt_b64> <hash_b64>
# Alternative CLI (erfordert explizite Unterbefehle)
python3 salt2.py generate "MeinPasswort"
python3 salt2.py verify <passwort> <salt_b64> <hash_b64>
Testen
# Alle Tests ausführen
python3 -m pytest
# Spezifische Tests mit ausführlicher Ausgabe ausführen
python3 -m pytest -k verify --maxfail=1 -vv
# Tests für ein bestimmtes Modul ausführen
python3 -m pytest tests/test_hashing.py
Abhängigkeiten
Abhängigkeiten sind in requirements.txt aufgelistet. Installation mit:
pip install -r requirements.txt
Code-Architektur
Modulstruktur
- salt.py: Kernmodul mit den Funktionen
hash_password()undverify_password()sowie einer integrierten CLI übermain() - salt2.py: Wrapper-CLI, die aus
salt.pyimportiert und eine alternative Befehlsstruktur bietet - tests/: Test-Suite, die die Modulstruktur widerspiegelt
test_hashing.py: Tests für Kern-Hashing-/Verifizierungsfunktionentest_cli.py: Tests für CLI-Verhalten (speziell die Abkürzungssyntax vonsalt.py)
Hauptfunktionen
hash_password(password, *, iterations=None, salt_bytes=16) -> tuple[str, str]
- Generiert ein kryptographisch sicheres zufälliges Salt
- Leitet einen Hash mit PBKDF2-HMAC-SHA256 ab
- Gibt ein base64-kodiertes (Salt, Hash) Tupel zurück
verify_password(password, salt_b64, hash_b64, *, iterations=None) -> bool
- Validiert ein Passwort gegen gespeichertes Salt/Hash
- Verwendet zeitkonstanten Vergleich über
hmac.compare_digest() - Gibt
Falsebei ungültigem base64 zurück, ohne Exceptions auszulösen
CLI-Argumentbehandlung
Das Modul salt.py enthält _normalize_args(), welches die Abkürzungssyntax ermöglicht: Wenn das erste Argument kein Unterbefehl (hash/verify) und kein Flag ist, wird automatisch hash vorangestellt. Dies wird in tests/test_cli.py:test_main_supports_hash_shortcut() getestet.
Entwicklungsrichtlinien
Python-Version und Stil
- Ziel-Python-Version: 3.11+
- Typannotationen für öffentliche Funktionen verwenden
- 4-Leerzeichen-Einrückung
lowercase_with_underscoresNamenskonvention für Funktionen und Variablen befolgen
Sicherheitspraktiken
- Immer
os.urandom()für Salt-Generierung verwenden (niemals vorhersagbare Werte) hmac.compare_digest()für Hash-Vergleich verwenden, um Timing-Angriffe zu verhindern- Base64-Eingabe mit
validate=TrueParameter validieren - Kodierungsfehler elegant behandeln, indem
Falsezurückgegeben wird statt Exceptions auszulösen
Testanforderungen
- Tests in
tests/test_<modul>.pyplatzieren, passend zum Modulnamen - Happy Paths und Fehlerbehandlung abdecken (ungültiges base64, falsche Passwörter)
- Round-Trip-Tests einschließen: hash → verify mit korrekten/inkorrekten Passwörtern
-
90% Coverage für Hashing-Utilities aufrechterhalten
- Bei Hinzufügen neuer Hash-Algorithmen Regressionstests mit bekannten Salt/Hash-Paaren einschließen
Konfiguration
- Iterationsanzahl standardmäßig 200.000, berücksichtigt aber die Umgebungsvariable
PBKDF2_ITERATIONS - Salt-Größe standardmäßig 16 Bytes (konfigurierbar über
salt_bytesParameter)
Commit-Richtlinien
Imperativ formulierte Betreffzeilen mit konventionellen Commit-Präfixen verwenden:
feat:für neue Featuresfix:für Fehlerbehebungentest:für Test-Hinzufügungen/-Änderungenrefactor:für Code-Umstrukturierung
Issues mit Fixes #ID referenzieren, wenn zutreffend. PRs sollten erst nach erfolgreichen Tests eröffnet werden.