1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| def xxtea_encrypt(data, key): def mx(sum, y, z, p, e, k): return (((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4)) ^ ((sum ^ y) + (k[(p & 3) ^ e] ^ z))) & 0xFFFFFFFF
n = len(data) if n < 2: return data delta = 0x9E3779B9 rounds = 6 + 52 // n sum = 0 z = data[-1] for _ in range(rounds): sum = (sum + delta) & 0xFFFFFFFF e = (sum >> 2) & 3 for p in range(n - 1): y = data[p + 1] data[p] = (data[p] + mx(sum, y, z, p, e, key)) & 0xFFFFFFFF z = data[p] y = data[0] data[-1] = (data[-1] + mx(sum, y, z, n - 1, e, key)) & 0xFFFFFFFF return data
def xxtea_decrypt(data, key): def mx(sum, y, z, p, e, k): return (((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4)) ^ ((sum ^ y) + (k[(p & 3) ^ e] ^ z))) & 0xFFFFFFFF
n = len(data) if n < 2: return data delta = 0x9E3779B9 rounds = 6 + 52 // n sum = (rounds * delta) & 0xFFFFFFFF y = data[0] for _ in range(rounds): e = (sum >> 2) & 3 for p in range(n - 1, 0, -1): z = data[p - 1] data[p] = (data[p] - mx(sum, y, z, p, e, key)) & 0xFFFFFFFF y = data[p] z = data[-1] data[0] = (data[0] - mx(sum, y, z, 0, e, key)) & 0xFFFFFFFF sum = (sum - delta) & 0xFFFFFFFF return data
|