選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

51 行
1.7 KiB

import base64
import hashlib
def getSign(params):
# sv传120
key = [55, 146, 68, 104, 165, 61, 204, 127, 187, 15, 217, 136, 238, 154, 233, 90]
arg0 = [56, 48, 51, 48, 54, 102, 52, 51, 55, 48, 98, 51, 57, 102, 100, 53, 54, 51, 48, 97, 100, 48, 53, 50, 57, 102,
55, 55, 97, 100, 98, 54]
sign = "functionId=" + params.get("functionId") + "&body=" + params.get("body") + "&uuid=" + params.get("uuid") \
+ "&client=" + params.get("client") + "&clientVersion=" + params.get("clientVersion") + "&st=" + str(
params.get("st")) \
+ "&sv=" + str(params.get("sv"))
arg2 = bytearray(sign, 'utf-8')
# print([x for x in arg2])
ss = [None] * len(arg2)
for i in range(len(arg2)):
R0 = arg2[i]
R2 = key[i & 15]
R4 = arg0[i & 7]
R0 = ((R2 ^ R0) ^ R4) + R2
R2 = (R2 ^ R0)
R1 = arg0[i & 7]
R2 = (R2 ^ R1)
# print(R2)
ss[i] = R2
m = hashlib.md5()
m.update(base64.b64encode(bytes(i % 256 for i in ss)))
return str(params.get("st")), m.hexdigest(), str(params.get("sv"))
# return "st=" + str(params.get("st")) + "&sign=" + m.hexdigest() + "&sv=" + str(params.get("sv"))
def generateSign():
params = {
"st": 1648992407201, # 毫秒级时间戳
"sv": "120",
"functionId": 'serverConfig',
"uuid": '947934e94e0cb9e4',
"client": "android",
"clientVersion": '10.4.6',
# "body": '{"to":"https://plogin.m.jd.com/jd-mlogin/static/html/appjmp_blank.html"}'
"body": '{}'
}
# return getSign(params)
print(getSign(params))
# print("正确结果:st=1648992407201&sign=474c50af52257126ae65700b825bdf4c&sv=120")
if __name__ == '__main__':
generateSign()