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()