第一次提交
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
"""用户 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
|
||||
Reference in New Issue
Block a user