后端新手初学接口验签和摘要

后端新手初学接口验签和摘要

admin
2026-01-17 / 0 评论 / 1 阅读 / 正在检测是否收录...

接口验签(Signature Verification)

什么是接口验签?

接口验签是一种验证请求或响应是否被篡改的机制。通过生成和验证签名,确保数据在传输过程中没有被篡改,并且请求确实来自合法的客户端。

验签的原理

客户端生成签名:

  1. 客户端使用约定的算法(如 HMAC-SHA256 或 MD5)和密钥,对请求参数进行签名。
  2. 签名通常基于请求的参数、时间戳、随机字符串等数据。
  3. 签名结果会附加到请求中(如 sign 字段)。

服务端验证签名:

  1. 服务端收到请求后,使用相同的算法和密钥,对请求参数重新计算签名。
  2. 将计算出的签名与客户端传递的签名进行比对。
  3. 如果一致,说明请求未被篡改;如果不一致,则拒绝请求。

验签的步骤

客户端:

  1. 将请求参数按一定规则排序(如按字母顺序)。
  2. 将排序后的参数拼接成字符串。
  3. 使用密钥和算法生成签名。
  4. 将签名附加到请求中。

服务端:

  1. 提取请求中的签名。
  2. 按相同规则对请求参数排序并拼接。
  3. 使用密钥和算法重新计算签名。
  4. 比对签名,验证请求的合法性。

示例

假设客户端发送以下请求:

{
  "param1": "value1",
  "param2": "value2",
  "timestamp": "1698765432",
  "nonce": "123456"
}

客户端使用 HMAC-SHA256 和密钥 secret 对参数进行签名:

import hmac
import hashlib

params = "param1=value1&param2=value2&timestamp=1698765432&nonce=123456"
key = "secret"
signature = hmac.new(key.encode(), params.encode(), hashlib.sha256).hexdigest()

生成的签名会附加到请求中:

{
  "param1": "value1",
  "param2": "value2",
  "timestamp": "1698765432",
  "nonce": "123456",
  "sign": "生成的签名"
}

服务端收到请求后,按相同规则重新计算签名并验证。

接口摘要(Digest)

什么是接口摘要?

接口摘要是对请求或响应内容的哈希值,用于验证数据的完整性。它确保数据在传输过程中没有被篡改。

摘要的原理

生成摘要:

  1. 对请求或响应的内容(如 JSON 或 XML)进行哈希计算(如 SHA-256)。
  2. 将哈希值附加到请求或响应中(如 digest 字段)。

验证摘要:

  1. 接收方对收到的内容重新计算哈希值。
  2. 将计算出的哈希值与传递的摘要进行比对。
  3. 如果一致,说明数据未被篡改;如果不一致,则拒绝数据。

摘要的步骤

发送方:

  1. 对请求或响应的内容进行哈希计算。
  2. 将哈希值附加到请求或响应中。

接收方:

  1. 提取请求或响应中的摘要。
  2. 对内容重新计算哈希值。
  3. 比对哈希值,验证数据的完整性。

示例

假设客户端发送以下请求:

{
  "param1": "value1",
  "param2": "value2"
}

客户端使用 SHA-256 对请求内容进行哈希计算:

import hashlib

content = '{"param1":"value1","param2":"value2"}'
digest = hashlib.sha256(content.encode()).hexdigest()

生成的摘要会附加到请求中:

{
  "param1": "value1",
  "param2": "value2",
  "digest": "生成的摘要"
}

服务端收到请求后,按相同规则重新计算摘要并验证。

接口验签 vs 接口摘要

特性接口验签接口摘要
目的验证请求的完整性和真实性验证数据的完整性
依赖需要密钥(对称或非对称)不需要密钥
生成方式基于参数和密钥生成签名基于内容生成哈希值
验证方式比对签名比对哈希值
适用场景确保请求来自合法客户端确保数据未被篡改

实际应用场景

接口验签:用于身份验证和防篡改,如支付接口、API 调用。
接口摘要:用于确保数据传输的完整性,如文件上传、数据同步。

注意事项

密钥管理:验签的密钥需要严格管理,避免泄露。
时间戳和随机数:在验签中加入时间戳和随机数,防止重放攻击。
哈希算法:选择安全的哈希算法(如 SHA-256),避免使用弱算法(如 MD5)。

0

评论 (0)

取消