中国移动OTA-暂时放弃

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);		
}
	

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值