Skip to content

API 签名(Signature)

为保障数据传输的安全性,每个接口请求均需在 Header 中包含以下鉴权字段:

  • X-APP-ID: 应用唯一标识
  • X-NONCE: 随机字符串
  • X-TIMESTAMP: 当前时间戳
  • X-SIGN: 动态签名。由 appIdnoncetimestampbody(若有)按 ASCII 升序排列拼接,并在此基础上于末尾追加 key 参数进行 MD5 加密所得。
    • 有 body 格式:appId={appId}&body={body}&nonce={nonce}&timestamp={timestamp}&key={key}
    • 无 body 格式:appId={appId}&nonce={nonce}&timestamp={timestamp}&key={key}

1. 准备工作

在开始生成签名之前,请确保您已获取以下凭证:

  • appId: 应用唯一标识。
  • key: 用于签名的私钥(请妥善保管,切勿泄露)。
  • 获取路径: 登录 cueip.com, 进入 “系统管理 / API 密钥” 菜单。若无权限,请联系客服开通。

2. 签名参数说明

生成签名需要以下四个核心参数:

参数名类型描述示例
appIdString您的应用 ID10001
keyString您的 API 密钥abc1234567890
nonceNumber随机数(建议使用随机整数或 UUID),增加请求唯一性847291
timestampNumber当前 Unix 时间戳(秒或毫秒,需与服务器时间同步)1713164000

3. 生成步骤

第一步:拼接字符串

将参数按照固定的顺序(字典序或指定顺序)拼接为待签名字符串。

注意: 必须严格遵守以下格式,不得包含空格:

appId={appId}&body={body}&nonce={nonce}&timestamp={timestamp}&key={key}

第二步:MD5 加密

对上述生成的字符串进行 MD5 加密。

4. 代码示例

Java

java
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;

public class SignatureDemo {

    /**
     * 生成签名方法
     * @param appId     应用ID
     * @param key       API密钥
     * @param nonce     随机数
     * @param timestamp 时间戳
     * @return MD5签名字符串
     */
    public static String generateSignature(String appId, String nonce, String timestamp, String key) {
        // 1. 按照规则拼接字符串
        // 格式: appId=*&nonce=*&timestamp=*&key=*
        String rawString = String.format("appId=%s&nonce=%s&timestamp=%s&key=%s",
                appId, nonce, timestamp, key);
        return md5(rawString);
    }

    private static String md5(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] hashBytes = md.digest(input.getBytes(StandardCharsets.UTF_8));

            StringBuilder sb = new StringBuilder();
            for (byte b : hashBytes) {
                sb.append(String.format("%02x", b));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("MD5 provider not found", e);
        }
    }

    public static void main(String[] args) {
        String appId = "*";
        String key = "*";
        String nonce = "*";
        String timestamp = "*";

        String sign = generateSignature(appId, nonce, timestamp, key);
        System.out.println("生成的签名: " + sign);
    }
}

5. 安全提示

  1. 密钥保护: key 仅应存在于服务端,严禁直接在前端(浏览器、App 直接暴露)进行签名逻辑,以免密钥被截获。
  2. 时效校验: 服务端通常会校验 timestamp,如果请求时间与服务器时间偏差过大(如超过 5 分钟),请求将被拒绝。