fix: Fernet 密钥派生使用 SHA256 哈希生成合法 32 字节密钥

- 原因: key.ljust(44, b'=') 不产生合法的 Fernet 密钥
- 修复: SHA256(SECRET_KEY) → base64url 编码 → 有效 Fernet key
This commit is contained in:
zwt13703 2026-07-06 17:03:55 +08:00
parent f0d61d5887
commit c4c2b44434
1 changed files with 8 additions and 2 deletions

View File

@ -1,11 +1,17 @@
import base64
import hashlib
from cryptography.fernet import Fernet from cryptography.fernet import Fernet
from app.core.config import get_settings from app.core.config import get_settings
def _derive_fernet_key(secret: str) -> bytes:
digest = hashlib.sha256(secret.encode("utf-8")).digest()
return base64.urlsafe_b64encode(digest)
def _get_fernet() -> Fernet: def _get_fernet() -> Fernet:
settings = get_settings() settings = get_settings()
key = settings.SECRET_KEY.encode("utf-8") key = _derive_fernet_key(settings.SECRET_KEY)
key = key.ljust(44, b"=")[:44]
return Fernet(key) return Fernet(key)