21 lines
675 B
Python
21 lines
675 B
Python
"""心跳响应防伪:MD5(时间桶 + verify_code)。"""
|
||
|
||
import hashlib
|
||
from datetime import datetime, timezone
|
||
|
||
|
||
def heartbeat_time_bucket(dt: datetime | None = None) -> str:
|
||
"""UTC 时间桶,格式如 ``2026-05-20 15``(精确到小时)。"""
|
||
if dt is None:
|
||
dt = datetime.now(timezone.utc)
|
||
elif dt.tzinfo is None:
|
||
dt = dt.replace(tzinfo=timezone.utc)
|
||
else:
|
||
dt = dt.astimezone(timezone.utc)
|
||
return dt.strftime("%Y-%m-%d %H")
|
||
|
||
|
||
def compute_server_verify_code(verify_code: str, dt: datetime | None = None) -> str:
|
||
raw = f"{heartbeat_time_bucket(dt)}{verify_code}"
|
||
return hashlib.md5(raw.encode("utf-8")).hexdigest()
|