Skip to content

Commit d59abae

Browse files
committed
refactor(provider): 重构 ZAI 签名生成逻辑,添加消息 Base64 编码
- 对 ZAI 提供商的签名生成过程进行重构,提高代码可读性和安全性。 - 主要改进包括对用户消息进行 Base64 编码处理,以及优化变量命名和代码结构。 - 添加了相应的测试文件来验证签名逻辑的正确性。
1 parent dae4afe commit d59abae

File tree

2 files changed

+46
-6
lines changed

2 files changed

+46
-6
lines changed

app/providers/zai_provider.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,20 @@ def _generate_signature_params(self, token: str, user_message: Optional[str]) ->
143143
chat_id = str(uuid.uuid4())
144144

145145
# 3. 构造签名
146-
safe_user_message = user_message or ""
147-
e = f"requestId,{request_id},timestamp,{timestamp},user_id,{user_id}"
148-
i = f"{e}|{safe_user_message}|{str(timestamp)}"
149-
n = timestamp // (5 * 60 * 1000)
146+
# 签名1:时间及key
147+
time_5min_split = timestamp // (5 * 60 * 1000)
150148
key = "junjie".encode('utf-8')
151-
o = hmac.new(key, str(n).encode('utf-8'), hashlib.sha256).hexdigest()
152-
signature = hmac.new(o.encode('utf-8'), i.encode('utf-8'), hashlib.sha256).hexdigest()
149+
signature_pre = hmac.new(key, str(time_5min_split).encode('utf-8'), hashlib.sha256).hexdigest()
150+
# 签名2:对消息签名
151+
# 用户最后一条消息
152+
safe_user_message = user_message or ""
153+
# 带请求信息的拼接字段
154+
request_info = f"requestId,{request_id},timestamp,{timestamp},user_id,{user_id}"
155+
# 用户消息的Base64编码
156+
user_message_encode = base64.b64encode(safe_user_message.encode('utf-8')).decode('utf-8')
157+
# 完整签名字符串
158+
sign_str = f"{request_info}|{user_message_encode}|{str(timestamp)}"
159+
signature = hmac.new(signature_pre.encode('utf-8'), sign_str.encode('utf-8'), hashlib.sha256).hexdigest()
153160

154161
return {
155162
"user_id": user_id,

tests/test_signature.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import time
2+
import uuid
3+
import hmac
4+
import hashlib
5+
import base64
6+
7+
# 1. 定义用户信息和消息
8+
user_id = "7db50472-f33b-4041-9b17-543704686133"
9+
user_message = "接下来呢?"
10+
11+
# 2. 生成签名所需参数
12+
timestamp = 1760341685487
13+
request_id = 'dfb576f5-a33c-4a93-8b47-b1a81df3ae27'
14+
# chat_id = str(uuid.uuid4())
15+
16+
# 3. 构造签名
17+
safe_user_message = user_message or ""
18+
e = f"requestId,{request_id},timestamp,{timestamp},user_id,{user_id}"
19+
msg_encode = base64.b64encode(safe_user_message.encode('utf-8')).decode('utf-8')
20+
i = f"{e}|{msg_encode}|{str(timestamp)}"
21+
n = timestamp // (5 * 60 * 1000)
22+
key = "junjie".encode('utf-8')
23+
o = hmac.new(key, str(n).encode('utf-8'), hashlib.sha256).hexdigest()
24+
print(o)
25+
print(o == "23d5377f55d1e213639b1533f6f6116724960aad0447497b71965146c6d110d8")
26+
27+
signature = hmac.new(o.encode('utf-8'), i.encode('utf-8'), hashlib.sha256).hexdigest()
28+
29+
print(signature)
30+
print(signature == "fd9acecbeb66030f866f49e90a73a24622fc2f65a4980ab0710ef78377f1f855")
31+
32+
'requestId,dfb576f5-a33c-4a93-8b47-b1a81df3ae27,timestamp,1760341685487,user_id,7db50472-f33b-4041-9b17-543704686133|接下来呢?|1760341685487'
33+
"requestId,dfb576f5-a33c-4a93-8b47-b1a81df3ae27,timestamp,1760341685487,user_id,7db50472-f33b-4041-9b17-543704686133|5o6l5LiL5p2l5ZGi77yf|1760341685487"

0 commit comments

Comments
 (0)