經過斷點分析得出,計算函數在https://g.alicdn.com/mtb/lib-mtop/2.3.16/mtop.js中,經過搜索得出計算公式爲:javascript
j = h(d.token + 「&」 + i + 「&」 + g + 「&」 + c.data)
具體函數爲java
if (d.H5Request === !0) { var f = "//" + (d.prefix ? d.prefix + "." : "") + (d.subDomain ? d.subDomain + "." : "") + d.mainDomain + "/h5/" + c.api.toLowerCase() + "/" + c.v.toLowerCase() + "/", g = c.appKey || ("waptest" === d.subDomain ? "4272" : "12574478"), i = (new Date).getTime(), j = h(d.token + "&" + i + "&" + g + "&" + c.data), k = { jsv: x, appKey: g, t: i, sign: j }, l = { data: c.data, ua: c.ua }; Object.keys(c).forEach(function (a) { "undefined" == typeof k[a] && "undefined" == typeof l[a] && (k[a] = c[a]) }), d.getJSONP ? k.type = "jsonp" : d.getOriginalJSONP ? k.type = "originaljsonp" : (d.getJSON || d.postJSON) && (k.type = "originaljson"), d.querystring = k, d.postdata = l, d.path = f }
進一步調試得知,h函數是計算md5值,所以可得知計算公式爲:python
md5Hex(token&t&appKey&data)
用python代碼實現以下:算法
def get_sign(token, t, data): pre_sign = token + '&' + t + '&' + appKey + '&' + data sign = hashlib.md5(pre_sign.encode(encoding='UTF-8')).hexdigest() return sign