Files
password-security-python/salt2.py

58 lines
1.7 KiB
Python

#!/usr/bin/env python3
"""Command line interface around the salt hashing helpers."""
from __future__ import annotations
import argparse
from typing import Sequence
from salt import hash_password, verify_password
def _build_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(
description="CLI für PBKDF2-Hashing inklusive Verify-Modus."
)
subparsers = parser.add_subparsers(dest="command", required=True)
generate_parser = subparsers.add_parser(
"generate", help="Erzeugt ein neues Salt+Hash Paar."
)
generate_parser.add_argument("password", help="Klartext-Passwort zum Hashen.")
verify_parser = subparsers.add_parser(
"verify",
help="Validiert ein Passwort anhand von Salt und Hash.",
)
verify_parser.add_argument("password", help="Passwort zum Prüfen.")
verify_parser.add_argument("salt", help="Base64-kodiertes Salt.")
verify_parser.add_argument("hash", help="Base64-kodierter Hash.")
return parser
def _command_generate(args: argparse.Namespace) -> int:
salt, hash_value = hash_password(args.password)
print(f"Salt: {salt}")
print(f"Hash: {hash_value}")
return 0
def _command_verify(args: argparse.Namespace) -> int:
if verify_password(args.password, args.salt, args.hash):
print("✓ Passwort korrekt")
return 0
print("✗ Passwort falsch")
return 1
def main(argv: Sequence[str] | None = None) -> int:
parser = _build_parser()
args = parser.parse_args(argv)
if args.command == "generate":
return _command_generate(args)
return _command_verify(args)
if __name__ == "__main__":
raise SystemExit(main())