#define DELTA 0x9e3779b9 #define MX (((z>>5^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (key[(p&3)^e] ^ z))) #define XXTEA_ENCODE_MODE 0 #define XXTEA_DECODE_MODE 1 void xxtea(unsigned int *v, int n, const unsigned int key[], int mode) { unsigned int y, z, sum; unsigned int p, rounds, e; if(n <= 1) return; if(mode == XXTEA_ENCODE_MODE) { /* Coding Part */ 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); } else if(mode == XXTEA_DECODE_MODE) { /* Decoding Part */ 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); } return; }
XXTEA算法的C语言实现
猜你喜欢
转载自openwrt.iteye.com/blog/2231786
今日推荐
周排行