# backend/app/auth/password.py — 비밀번호 해시/검증 (stdlib pbkdf2, 의존성 없음) import hashlib import hmac import os _ITER = 200_000 _ALGO = "sha256" def hash_password(password: str) -> str: salt = os.urandom(16) dk = hashlib.pbkdf2_hmac(_ALGO, password.encode("utf-8"), salt, _ITER) return f"pbkdf2${_ITER}${salt.hex()}${dk.hex()}" def verify_password(password: str, stored: str) -> bool: try: scheme, iters, salt_hex, hash_hex = stored.split("$") if scheme != "pbkdf2": return False dk = hashlib.pbkdf2_hmac( _ALGO, password.encode("utf-8"), bytes.fromhex(salt_hex), int(iters) ) return hmac.compare_digest(dk.hex(), hash_hex) except (ValueError, AttributeError): return False