You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否解析服务器返回的hmac_sha256签名?解析方法咨询

关于HMAC-SHA256返回签名的解析问题

首先明确:HMAC-SHA256生成的签名不可逆,无法直接解析出原始的签名输入数据。这是哈希类签名算法的核心特性——从原始数据可以生成唯一的固定长度哈希值,但反过来无法通过哈希值还原出原始内容,哪怕是部分内容也做不到。

如果你是想验证服务器返回签名的有效性(确认返回数据未被篡改),可以按以下步骤操作:

  • 确认服务器生成签名的原始数据规则:服务器会基于返回的关键业务数据(比如交易订单号、金额、返回状态码、时间戳等)拼接成待签名字符串,你需要和服务端对接确认具体的拼接顺序、分隔符(如果有的话)、数据格式(比如数字是字符串还是数值类型)。
  • 获取共享的HMAC密钥:这个密钥必须和你发起请求时使用的验证密钥一致(或者服务端有专门的验证密钥,需提前约定),密钥绝不能对外泄露。
  • 按照服务端规则拼接待签名数据,用hmac_sha256算法重新生成签名:注意编码格式(通常用UTF-8)、哈希结果的输出格式(是十六进制字符串还是二进制字节流,要和服务器返回的签名格式一致)。
  • 对比签名:将你本地生成的签名和服务器返回的签名做完全匹配对比,一致则说明返回数据可信,未被篡改;不一致则可能是数据被篡改、规则不符或者密钥错误。

举个Python的验证示例:

import hmac
import hashlib

# 示例:假设服务器返回的核心数据和签名
order_id = "20240520100001"
amount = "99.9"
status_code = "SUCCESS"
server_signature = "abcdef123456..."  # 服务器返回的签名

# 约定的待签名数据拼接规则:订单号+金额+状态码
data_to_sign = f"{order_id}{amount}{status_code}".encode("utf-8")
# 共享的HMAC密钥
secret_key = b"your_shared_secret_key_here"

# 本地生成签名
local_signature = hmac.new(secret_key, data_to_sign, hashlib.sha256).hexdigest()

# 验证
if local_signature == server_signature:
    print("返回签名有效,数据未被篡改")
else:
    print("返回签名无效,数据可能存在异常")

内容的提问来源于stack exchange,提问作者Chinese cabbage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 22:57:16