33 lines
1.0 KiB
Python
33 lines
1.0 KiB
Python
import hashlib
|
|
import hmac
|
|
import json
|
|
from typing import Dict, Any
|
|
|
|
class SignatureGenerator:
|
|
"""签名生成器"""
|
|
|
|
def __init__(self, sign_key: str):
|
|
self.sign_key = sign_key
|
|
|
|
def hmac_sha256(self, message: str) -> str:
|
|
"""使用HMAC-SHA256算法生成签名"""
|
|
key_bytes = self.sign_key.encode('utf-8')
|
|
message_bytes = message.encode('utf-8')
|
|
return hmac.new(key_bytes, message_bytes, hashlib.sha256).hexdigest()
|
|
|
|
def generate_signature(self, url_path: str, data: Dict[str, Any] = None) -> str:
|
|
"""生成请求签名"""
|
|
sign_message = url_path
|
|
|
|
if data:
|
|
# 将布尔值转换为字符串
|
|
data_copy = data.copy()
|
|
for key, value in data_copy.items():
|
|
if isinstance(value, bool):
|
|
data_copy[key] = "true" if value else "false"
|
|
|
|
# 添加请求体到签名消息
|
|
sign_message += json.dumps(data_copy, ensure_ascii=False, separators=(',', ':'))
|
|
|
|
return self.hmac_sha256(sign_message)
|