ForcePilot/backend/package/yuxi/channel/common/crypto.py
Kris bab30f2715
Some checks failed
Deploy VitePress site to Pages / build (push) Has been cancelled
Ruff Format Check / Ruff Format & Lint (push) Has been cancelled
Deploy VitePress site to Pages / Deploy (push) Has been cancelled
feat:0715
2026-07-15 12:30:58 +08:00

44 lines
1.5 KiB
Python

import base64
import hashlib
import hmac
import time
def _normalize_bytes(value: str | bytes) -> bytes:
return value.encode("utf-8") if isinstance(value, str) else value
def hmac_sha256_sign(secret: str | bytes, message: str | bytes) -> bytes:
"""使用 HMAC-SHA256 对消息进行签名,返回原始字节签名。"""
key = _normalize_bytes(secret)
msg = _normalize_bytes(message)
return hmac.new(key, msg, hashlib.sha256).digest()
def hmac_sha256_base64(secret: str | bytes, message: str | bytes) -> str:
"""使用 HMAC-SHA256 对消息进行签名,返回 Base64 编码字符串。"""
return base64.b64encode(hmac_sha256_sign(secret, message)).decode("utf-8")
def verify_hmac_digest(secret: str | bytes, message: str | bytes, signature: str | bytes | None) -> bool:
"""验证 HMAC-SHA256 签名是否匹配。"""
if signature is None:
return False
expected = hmac_sha256_sign(secret, message)
actual = _normalize_bytes(signature)
return hmac.compare_digest(expected, actual)
def sha1_sorted_sign(*parts: str) -> str:
"""将多个字符串排序拼接后进行 SHA1 签名,返回十六进制字符串。"""
return hashlib.sha1("".join(sorted(parts)).encode("utf-8")).hexdigest()
def verify_timestamp(timestamp: str | int, tolerance: int = 300) -> bool:
"""校验时间戳与当前时间的偏差是否在允许范围内。"""
try:
ts = int(timestamp)
except (TypeError, ValueError):
return False
return abs(int(time.time()) - ts) <= tolerance