校验码V3 版本

校验码 V3版主要更新点

  • 在Header头中增加协商秘钥的key,旨在解决在线更换秘钥的问题
  • 校验码计算规则改成body体中所有数据加上秘钥进行MD5Hash

Header介绍

  1. platform-auth-version:固定写死 v3
  2. platform-auth-timestamp:服务器时间戳,毫秒数
  3. platform-auth-key-id:秘钥keyId,第三方平台由GSC平台统一进行分配; 产品接入以平台的productId+localeId进行替代(如GMT接入);
  4. platform-auth-checksum:请求数据计算后的校验码

校验码原理及作用

校验码即 checkSum 是为了防止双方通信过程中交换的数据被篡改的一种通用校验方式。 由交换数据双方按照某种规则组装生成请求明文数据, 然后追加上当前时间戳和双方协商好的秘钥[需要线下获取] ,生成校验码明文, 再通过对明文进行散列值计算获取到数据指纹即校验码, 请求方把时间戳、校验码版本号、秘钥ID以及校验码放到Header头中发送给服务方,服务方获取后再次按照相同进行计算数据指纹, 通过比较自己生成和请求方传递过来得数据指纹是否一致来确定数据是否合法。

校验码明文

本次请求body体中的数据

  • 散列值计算
    校验码散列值算法:MD5, 注意取32位md5,并转小写。
  • 示例
    请求body中的json如下
  1. {"yyyymm":"202008","localeId":"01"}

假设平台分配的秘钥key-id(秘钥ID)为1001, 当前的毫秒时间戳为:1600422195516, key(秘钥)为:eea2e42511c3294d47b4d2deaf4ea33c
组装后的校验码明文串如下(注意原始数据和时间戳以及密码key之间通过&符号连接):

  1. {"yyyymm":"202008","localeId":"01"}&1600422195516&eea2e42511c3294d47b4d2deaf4ea33c

校验码密文

生成校验码如下

  1. be6f17515783ae719710fd195461f377

Header示例

注意:此时该请求的header头的四个校验码相关的header值如下

  1. platform-auth-version:v3
  2. platform-auth-timestamp:1600422195516
  3. platform-auth-key-id:1001
  4. platform-auth-checksum:be6f17515783ae719710fd195461f377

校验码V1 版本

校验码原理及作用

校验码即 checkSum 是为了防止双方通信过程中交换的数据被篡改的一种通用校验方式。 由交换双方按照某种顺序把参与校验的数据拼接在一起, 再追加上双方协商好的秘钥[需要线下获取] ,生成校验码明文, 再通过对明文进行散列值计算获取到数据指纹校验码, 请求方把原请求参数和校验码一并发送给服务方,服务方获取后再次按照相同顺序进行数据拼接,并追加上协商好的秘钥,用相同算法再次计算散列值,获取校验码, 通过比较自己生成和请求方传递过来得校验码是否一致来确定数据是否合法。

校验码明文拼接规则

接口文档中标注是验签参数的数据,按其参数key进行字典排序(ASCII码从小到大排序),然后取每个参数的value,进行拼接, 不同参数之间使用英文&进行分割,最后再追加上协商好的秘钥,得出校验码明文。

  • 参数key区分大小写。
  • 按字典排序,即ASCII码从小到大排序。
  • 参数值为空或不传时,按空字符串进行拼接。

散列值计算

校验码散列值算法:MD5, 注意取32位md5,并转小写。

注意:校验码必须由服务端进行计算生成,避免秘钥外泄

示例

原参数及值

  1. {
  2. "type":"2",
  3. "gameServerId":"1",
  4. "gameServerName":"未来之城",
  5. "roleId":"5f438152-258d-47ff-82bf-c7ba314a4fce",
  6. "roleName":"doublinglee_微信",
  7. "roleLevel":"0",
  8. "roleVipLevel":""
  9. }

假设约定秘钥如下

  1. b306ab1d0421ad3c73ad2c409621669c

生成校验码明文如下

  1. 1&未来之城&5f438152-258d-47ff-82bf-c7ba314a4fce&0&doublinglee_微信&&2&b306ab1d0421ad3c73ad2c409621669c

生成校验码如下

  1. 67dcc59acaa6220214c81d6aa43bf9cf