您的位置:首页 > 编程语言 > C语言/C++

XXTEA加密算法C++版

2015-06-16 19:26 267 查看
#define DELTA 0x9e3779b9
#define MX (((z>>5^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (key[(p&3)^e] ^ z)))

static void btea(uint32_t *v, int n, uint32_t const key[4]) {
uint32_t y, z, sum;
unsigned p, rounds, e;
if (n > 1) {          /* 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 (n < -1) {  /* Decoding Part */
n = -n;
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);
}
}


BTEA 会加密或解密 n(n > 1) 个字组成的块

v 是一个n个字的数组

key 是4个字节的密钥

n 数组中字的个数,正为加密,负为解密

这个版本是原来的改进版,因为在一些语言中, 原来的版本在初始化z的时候会导致分块错误,更好的方式是放在编码部分块内。而且,在MX函数的定义中,一些程序员会选择用括号来表明操作符的优先级。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: