Files
item_bank/app/services/crypto.py
T
2026-08-01 16:50:55 +08:00

25 lines
804 B
Python

"""用户 AI api_key 的对称加密(Fernet)。密钥来自 settings.fernet_key。"""
from cryptography.fernet import Fernet, InvalidToken
from app.config import settings
def _fernet() -> Fernet:
if not settings.fernet_key:
raise RuntimeError(
"FERNET_KEY 未配置,无法加解密用户 api_key。"
"生成:python -c \"from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())\""
)
return Fernet(settings.fernet_key.encode("utf-8"))
def encrypt(plaintext: str) -> str:
return _fernet().encrypt(plaintext.encode("utf-8")).decode("utf-8")
def decrypt(token: str) -> str | None:
try:
return _fernet().decrypt(token.encode("utf-8")).decode("utf-8")
except (InvalidToken, ValueError):
return None