https://open.iot.10086.cn/doc/book/device-develop/OTA/example/simulate.html
https://blog.csdn.net/yunjie167/article/details/90214866
https://open.iot.10086.cn/doc/book/easy-manual/auth.html
不得不放弃 浪费时间 没有结果 不知道移动做的个啥 太糟糕
流程基本是:发起HTTP去检测---这个发起需要携带参数的 而这个参数也就是TOKEN很难搞--平台回答OK--然后你去HTTP拉文件下载BIN--最后你上报HTTP状态平台就显示升级成功
也就是它多了门槛!之前需要TOKEN
import base64
import hmac
import time
from urllib.parse import quote
#https://open.iot.10086.cn/doc/book/easy-manual/auth.html
def token(name,access_key):
version = '2018-10-31'
res = 'mqs/%s' % id # 通过实例名称访问MQ
# res = 'products/%s' % id # 通过产品ID访问产品API
# 用户自定义token过期时间
et = str(int(time.time()) + 3600)
# 签名方法,支持md5、sha1、sha256
method = 'sha1'
# 对access_key进行decode
key = base64.b64decode(access_key)
# 计算sign
org = et + '\n' + method + '\n' + res + '\n' + version
sign_b = hmac.new(key=key, msg=org.encode(), digestmod=method)
sign = base64.b64encode(sign_b.digest()).decode()
# value 部分进行url编码,method/res/version值较为简单无需编码
sign = quote(sign, safe='')
res = quote(res, safe='')
# token参数拼接
token = 'version=%s&res=%s&et=%s&method=%s&sign=%s' % (version, res, et, method, sign)
return token
if __name__ == '__main__':
id = 'A1EB10110CFA9E06D6209E40C4A6D7976'
access_key = 'KuF3NT/jUBJ62LNBB/A8XZA9CqS3Cu79B/ABmfA1UCw='
print(token(id,access_key))
#version=2018-10-31&res=products%2F245528&et=7559008892&method=sha1&sign=TPllhakDDnUV90epLnOqpj6aWqI%3D
version=2018-10-31& -----写一个时间
res=products%2F245528& ---这个格式的产品ID
et=7559008892& ----有效时间
method=sha1& ---写死
sign=TPllhakDDnUV90epLnOqpj6aWqI%3D ----麻烦之王 先把原文准备org--做SHA1--做BSAE64--还有一个quote处理--得到参数
10086.py
我自己写的单片机的 算出来不一样 烦死人
#include "mbedtls/base64.h"
typedef struct
{
char outputB64[100];
int outputlen;
char output[100];
char key[100];
int keylen;
char input[100];
int inputlen;
}Sha1Type;
void show10086(Sha1Type *p)
{
log(ERR,"p->input 【%s】\r\n",p->input);
log(ERR,"p->key 【%s】\r\n",p->key);
log(ERR,"p->output 【%s】\r\n",p->output);
log_arry(ERR,"p->outputB64",p->outputB64,p->outputlen);
}
void test10086(void)
{
Sha1Type Au10086;
Sha1Type *p = &Au10086;
memset(p,0,sizeof(Sha1Type));
memcpy(p->input,"7559008892",strlen("7559008892"));
strcat(p->input,"\n");
strcat(p->input,"sha1");
strcat(p->input,"\n");
strcat(p->input,"products%245528");
strcat(p->input,"\n");
strcat(p->input,"2018-10-31");
p->inputlen = strlen(p->input);
p->keylen = strlen("RePqKaM9eCTjyUV17/QP/kzyDLkfMwZYvcthTqT0qC0=");
memcpy(p->key,"RePqKaM9eCTjyUV17/QP/kzyDLkfMwZYvcthTqT0qC0=",p->keylen);
mbedtls_hmac_sha1(p->output,p->key , p->keylen, p->input, p->inputlen);
mbedtls_base64_decode(p->outputB64, sizeof(p->outputB64), &p->outputlen, p->output, strlen(p->output));
show10086(p);
}