assistant/backend/security.py

36 lines
1.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""系统账号密码的加解密(Fernet 对称加密)。
密钥来自 .env 的 ACCOUNT_ENC_KEY。生成方式:
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
"""
from cryptography.fernet import Fernet, InvalidToken
from backend.config import settings
def _fernet() -> Fernet:
key = (settings.account_enc_key or "").strip()
if not key:
raise RuntimeError(
"未配置 ACCOUNT_ENC_KEY,无法保存或读取系统账号。"
'生成:python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())",'
"写入 .env 后重启后端。"
)
return Fernet(key.encode("ascii"))
def encrypt_secret(plain: str) -> str:
return _fernet().encrypt(plain.encode("utf-8")).decode("ascii")
def decrypt_secret(token: str) -> str:
try:
return _fernet().decrypt(token.encode("ascii")).decode("utf-8")
except InvalidToken as e:
raise RuntimeError("账号密码解密失败:当前 ACCOUNT_ENC_KEY 与加密时使用的不一致") from e
def generate_key() -> str:
return Fernet.generate_key().decode("ascii")