def_long2str(v, w): #转换成无字符 n = (len(v) - 1) << 2 if w: m = v[-1] if (m < n - 3) or (m > n): return'' n = m s = struct.pack('<%iL' % len(v), *v) return s[0:n] if w else s
def_str2long(s, w): n = len(s) m = (4 - (n & 3) & 3) + n s = s.ljust(m, "\0") v = list(struct.unpack('<%iL' % (m >> 2), bytes(s,encoding='ISO-8859-1'))) if w: v.append(n) return v
defdecrypt(str, key): _DELTA = 0x9E3779B9 v = _str2long(str, False) k = _str2long(key.ljust(16, "\0"), False) n = len(v) - 1 z = v[n] y = v[0] q = 6 + 52 // (n + 1) sum = (q * _DELTA) & 0xffffffff while (sum != 0): e = sum >> 2 & 3 for p inrange(n, 0, -1): z = v[p - 1] v[p] = (v[p] - ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z))) & 0xffffffff y = v[p] z = v[n] v[0] = (v[0] - ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[0 & 3 ^ e] ^ z))) & 0xffffffff y = v[0] sum = (sum - _DELTA) & 0xffffffff return _long2str(v, True)
if __name__ == "__main__": key = "flag" data1 = [188, 165, 206, 64, 244, 178, 178, 231, 169, 18, 157, 18, 174, 16, 200, 91, 61, 215, 6, 29, 220, 112, 248, 220] s = "".join(chr(i)for i in data1) s = decrypt(s, key) print(s)