passwords.py 704 B

12345678910111213141516171819202122232425262728
  1. """Argon2id 密码散列与校验。"""
  2. from __future__ import annotations
  3. from argon2 import PasswordHasher, Type
  4. from argon2.exceptions import Argon2Error
  5. _PASSWORD_HASHER = PasswordHasher(type=Type.ID)
  6. _DUMMY_PASSWORD_HASH = _PASSWORD_HASHER.hash(
  7. "fixed-invalid-credential-placeholder"
  8. )
  9. def hash_password(password: str) -> str:
  10. if not password:
  11. raise ValueError("密码不能为空")
  12. return _PASSWORD_HASHER.hash(password)
  13. def verify_password(password_hash: str | None, password: str) -> bool:
  14. try:
  15. return _PASSWORD_HASHER.verify(
  16. password_hash or _DUMMY_PASSWORD_HASH,
  17. password,
  18. )
  19. except Argon2Error:
  20. return False