ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
13 июля
461178
Vit (07.11.2013 20:57, просмотров: 7845)
Гы, только что распинал протокол с блочным шифрованием XTEA1. После XTEA ну очень понравилось (плюс добавил чуток "соли"). Категорически рекомендую от попыток подслушки и декомпиляции. Конечно не несимметричный с третьей стороной, но намного http://ru.wikipedia.org/wiki/XTEA
вкуснее просто XTEA. #define DELTA 0x9E3779B9 #define NUMROUNDS 32ul; unsigned long key[4]={7,8,9,0}; void xtea1_encoder(u32 *v, u8 len) { unsigned int num_rounds = NUMROUNDS; u32 const *k = &key[0]; u32 y, z, sum=0; while(len){ if((v[0]==0xFFFFFFFF)&&(v[1]==0xFFFFFFFF)){ v += 2; len-=2; continue; } /* load and pre-white the registers */ y = v[0] + k[0]; z = v[1] + k[1]; /* Round functions */ while(num_rounds){ y += ((z << 4) ^ (z >> 5)) + (z ^ sum) + rol(k[sum & 3], z); sum += DELTA; z += ((y << 4) ^ (y >> 5)) + (y ^ sum) + rol(k[(sum >> 11) & 3], y); num_rounds--; } /* post-white and store registers */ *v++ = y ^ k[2]; *v++ = z ^ k[3]; len-=2; } } void xtea1_decoder(u32 *v, u8 len){ unsigned int num_rounds = NUMROUNDS; u32 const *k = &key[0]; u32 y, z, sum; while(len){ if((v[0]==0xFFFFFFFF)&&(v[1]==0xFFFFFFFF)){ v += 2; len-=2; continue; } sum = DELTA * NUMROUNDS; z = v[1] ^ k[3]; y = v[0] ^ k[2]; while(num_rounds){ z -= ((y << 4) ^ (y >> 5)) + (y ^ sum) + rol(k[(sum >> 11) & 3], y); sum -= DELTA; y -= ((z << 4) ^ (z >> 5)) + (z ^ sum) + rol(k[sum & 3], z); num_rounds--; } *v++ = y - k[0]; *v++ = z - k[1]; len-=2; } }