API
路径、参数顺序、签名公式与成功 JSON 对齐科御网络验证系统开发文档 V3.0.0。apiRoute 不含前缀 /v3/,例如 License/verify/10000。
sign = MD5(apiRoute + 有序参数 + signKey)。signKey 只参与本地拼接,不放进请求体。data = Base64(AES-128-ECB-PKCS7(mode|authCode|password|deviceId|timeStamp, signKey)),sign 仍按明文公式计算,不加密。加密密钥即为签名密钥(UTF-8,不足 16 字节补 0,超出截断)。RSA 签名不要拼接系统公钥。科御 AES 项目请求体是 data=&sign=&encoding=utf-8。sign = MD5(code + endDate + token + remark + timeStamp + signKey)。AES 响应除 sign 外每个字段单独加密。失败 sign = MD5(code + msg + signKey)。const apiRoute = "License/verify/" + appId; const sign = md5(apiRoute + mode + authCode + password + deviceId + timeStamp + signKey); // 科御 AES(官方默认): // data = Base64(AES-128-ECB-PKCS7(mode|authCode|password|deviceId|timeStamp, signKey)) // POST body: data=<urlencode(b64)>&sign=<md5>&encoding=utf-8 // 仅签名: // body: mode=0&authCode=...&password=&deviceId=DEVDEMO0001&timeStamp=...&sign=... // 响应:除 sign 外每字段单独 AES+Base64;sign = md5(明文前5项 + signKey)
单文件,gcc + libssl 运行库。内置 MD5、AES-128-ECB PKCS7、Base64;HTTP/HTTPS POST(80 遇到 308 会自动改走 443)。默认按科御 AES 发送 data+sign+encoding。
# 编译 gcc -O2 -Wall -o keyunet_verify keyunet_verify.c -ldl ./keyunet_verify -t # 官方科御 AES(默认):POST data=&sign=&encoding=utf-8 ./keyunet_verify -H api.keyunet.cn -P 80 \ -A 67612919 -K gngkcyuBkc56xMmM \ -C MYo1VJWrGdWm -D MYLINUX001 -m 0 # 本站仅签名项目再加 -e sign -s ./keyunet_verify -H keyu.grok.me -s -e sign \ -A 10000 -K KeyuNetSignKey01 -C KY-YEAR-DEMO01 -D DEVDEMO0001 # signKey 只在本地拼进 MD5 / 当 AES 密钥,不放进请求体 # deviceId 只能字母数字,不能有 -
完整源码:keyunet_verify.c/Makefile
网络验证
appId 即项目 ID。计次以 surplusCount 代替 endDate。卡密模式 password 为空。deviceId 仅字母数字 5-64 位。成功 sign = MD5(code+endDate+token+remark+timeStamp+signKey)。冻结卡 102 授权冻结;黑名单 102 授权已被封禁;过期 101;错卡 103。
心跳守护
成功 sign = MD5(code+endDate+timeStamp+signKey)。计次用 surplusCount。失败 504 令牌无效;设备不一致 104;建议间隔不低于 200 秒。
黑名封禁
拉黑设备与来源 IP 后,验证 / 心跳返回 102 授权已被封禁。
远程函数
需有效心跳令牌。函数体为自定义 JS,return 写入 result。params 英文逗号拆成 $1…$9。响应 sign = MD5(code+result+timeStamp+signKey)。
添加变量
变量名不可重复,已存在返回 508。
删除变量
不存在返回 505 远程变量不存在。
更新变量
不存在或已停用返回 505。
读取变量
需要有效心跳令牌。返回 sign = MD5(code+value+timeStamp+signKey)。
更新备注
按卡号更新备注;卡号不存在返回 602。
项目信息
select=0 全部,签名为除 sign 外全部字段顺序拼接;1–12 单项,签名 = code+该项+timeStamp+signKey(9 为商店链接)。
自动更新
{appId} 同样是项目 ID。方案①用项目版本+下载网址;方案②热更新 GET。这是少数会在 URL 里带 key 的接口。