text: Реализация на языке программирования Си (адаптированный вариант кода, представленного в статье Дэвида Уилера и Роджера Нидхэма) функций шифрования и расшифрования с использованием алгоритма TEA: #include <stdint.h> void encrypt (uint32_t* v, uint32_t* k) { /* set up */ uint32_t v0 = v; uint32_t v1 = v; uint32_t sum = 0; uint32_t i; /* a key schedule constant */ uint32_t delta = 0x9e3779b9; /* cache key */ uint32_t k0 = k; uint32_t k1 = k; uint32_t k2 = k; uint32_t k3 = k; /* basic cycle start */ for (i = 0; i < 32; i++) { sum += delta; v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1); v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3); } /* end cycle */ v = v0; v = v1; } void decrypt (uint32_t* v, uint32_t* k) { /* set up */ uint32_t v0 = v; uint32_t v1 = v; uint32_t sum = 0xC6EF3720; uint32_t i; /* a key schedule constant */ uint32_t delta = 0x9e3779b9; /* cache key */ uint32_t k0 = k; uint32_t k1 = k; uint32_t k2 = k; uint32_t k3 = k; /* basic cycle start */ for (i = 0; i < 32; i++) { v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3); v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1); sum -= delta; } /* end cycle */ v = v0; v = v1; } Комментарии: v — исходный текст состоящий из двух частей по 32 бита k — ключ состоящий из четырёх 32-битных частей Изменения по сравнению с оригинальным кодом: используется тип uint32_t вследствие того, что он всегда имеет размер 32 бита в отличие от long (присутствующий в оригинальном коде), который может содержать 64 бита (например в некоторых 64 битных системах) исходный код не использует тип const в исходном коде опущены избыточные скобки в выражениях для v0 и v1, в данной модификации они оставлены для большей наглядности Предполагается, что данный алгоритм обеспечивает защищённость, сравнимую с алгоритмом шифрования IDEA, так как он использует ту же идею использования операций из ортогональных алгебраических групп.