Гудвинволшебник (02.09.2014 18:20, просмотров: 175) ответил Apтём на Ссылку на реализацию не подскажете?
Ну вот, например по ссылке. А вот, наример, декодеры XTEA и RTEA для массива, кратного 8 байт, из моих проектов: http://ru.wikibooks.org/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D0%B5_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_RC4
const unsigned long DELTA = 0x9E3779B9;
const unsigned long N = 32; // 32 итерации
const unsigned long key[4] = {0x11111111,0x11111111,0x11111111,0x11111111}; // 64 бит
void XTEAdecode(unsigned long* data, unsigned char dataLength)
{
unsigned char i=0;
unsigned long x1;
unsigned long x2;
unsigned long sum;
while(i<dataLength)
{
sum = DELTA*N; // 32 итерации
x1=*data;
x2=*(data+1);
while(sum != 0)
{
x2 -= ((x1<<4 ^ x1>>5) + x1) ^ (sum + *(key+(sum>>11&0x03)));
sum-=DELTA;
x1 -= ((x2<<4 ^ x2>>5) + x2) ^ (sum + *(key+(sum&0x03)));
}
*(data++)=x1;
*(data++)=x2;
i+=2;
}
}
void RTEAdecode(unsigned long* data, unsigned char dataLength)
{
const unsigned long key[8]={0x11111111,0x11111111,0x11111111,0x11111111,0x11111111,0x11111111,0x11111111,0x11111111};
//ключ RTEA 256 бит
unsigned char i=0;
unsigned long a;
unsigned long b;
signed char r;
while(i<dataLength)
{
a=*data;
b=*(data+1);
for (r=63;r>=0;r--)
{
a-=b+((b<<6)^(b>>8))+ (key[r%8]+r);
r--;
b-=a+((a<<6)^(a>>8))+ (key[r%8]+r);
}
*(data++)=a;
*(data++)=b;
i+=2;
}
}