localfunctionFF(a,b,c,d,x,s,ac) a = (a + ((b & c) | ((~b) & d)) + x + ac) & 0xffffffff a = ((a << s) | (a >> (32 - s))) & 0xffffffff return (a + b) & 0xffffffff end -- GG: (b & d) | (c & ~d); HH: b ~ c ~ d; II: c ~ (b | ~d)
localfunctiontransform(state, input, i, t) ... a = FF(a,b,c,d,t[1], 7, 0xd76aa478) -- 标准 MD5 常量 & 移位 d = FF(d,a,b,c,t[2],12, 0xe8c7b756) ... 共 64 步 FF/GG/HH/II ... end
functionsign(input) local state = {0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476} -- 标准 MD5 IV ...填充: '\x80' + 0 + spack("<I8", inputbits) ... -- 标准 MD5 padding returnstring.format("%08x%08x%08x%08x", state[1],state[2],state[3],state[4]) end
defsign(content: str) -> str: d = hashlib.md5(content.encode()).digest() # 标准 MD5(状态字以小端字节存储) words = struct.unpack('<4I', d) # 还原 4 个 32 位状态字 return''.join('%08x' % w for w in words) # 大端逐字打印(= code.lua 的 %08x)
URL = "https://www.python-spider.com/api/app20" sess = requests.Session() total = 0 for page inrange(1, 101): ms = int(time.time()*1000) r = sess.post(URL, data={"page":page, "t":ms, "sign":sign(f"{page}:{ms}")}, headers={"User-Agent":"okhttp/4.9.2"}, timeout=15).json() total += sum(int(x["value"]) for x in r["data"]) # 每页 10 个数 print("ANSWER =", total)