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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
   | #include <bits/stdc++.h> using namespace std; #define MX ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z)) void xxteaEncrtpy(uint32_t *v, size_t n, uint32_t *k) {     uint32_t y, z, sum;     uint32_t p, rounds, e;     uint32_t delta = 0x9E3779B9;     rounds = 6 + 52 / n;     sum = 0;     z = v[n - 1];     do     {         sum += delta;         e = (sum >> 2) & 3;          for (p = 0; p < n - 1; p++)         {             y = v[p + 1];             z = v[p] += MX;          }         y = v[0];          z = v[n - 1] += MX;     } while (--rounds);  } void xxteaDecrypt(uint32_t *v, size_t n, uint32_t *k) {     uint32_t y, z, sum;     uint32_t p, rounds, e;     uint32_t delta = 0x9E3779B9;     rounds = 6 + 52 / n;     sum = rounds * delta;     y = v[0];      do     {         e = (sum >> 2) & 3;         for (p = n - 1; p > 0; p--)          {             z = v[p - 1];                y = v[p] -= MX;          }         z = v[n - 1];          y = v[0] -= MX;         sum -= delta;     } while (--rounds); } int main() {     uint32_t k[4] = {0x01234567, 0x89abcdef, 0xfedcba98, 0x76543210};     char v[] = "Eleven11";     xxteaEncrtpy((uint32_t *)v, strlen(v) / 4, k);     for (int i = 0; i < 8; i++)         printf("%c", v[i] & 0xFF);     printf("\n");     xxteaDecrypt((uint32_t *)v, strlen(v) / 4, k);     for (int i = 0; i < 8; i++)         printf("%c", v[i]);     printf("\n");     return 0; }
   |