TEA、XTEA、XXTEA加密解密算法(2)

img

加密前原始数据:1 2 加密后的数据:1345390024 2801624574 解密后的数据:1 2 Process returned 0 (0x0) execution time : 0.034 s Press any key to continue.

XXTEA,又称Corrected Block TEA,是XTEA的升级版

,设计者是Roger Needham, David Wheeler

加密过程:

img

算法实现:

示例代码:

#include <stdio.h> #include <stdint.h> #define DELTA 0x9e3779b9 #define MX (((z>>5^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (key[(p&3)^e] ^ z))) 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); } } int main() { uint32_t v[2]= {1,2}; uint32_t const k[4]= {2,2,3,4}; int n= 2; //n的绝对值表示v的长度,取正表示加密,取负表示解密 // v为要加密的数据是两个32位无符号整数 // k为加密解密密钥,为4个32位无符号整数,即密钥长度为128位 printf("加密前原始数据:%u %u\n",v[0],v[1]); btea(v, n, k); printf("加密后的数据:%u %u\n",v[0],v[1]); btea(v, -n, k); printf("解密后的数据:%u %u\n",v[0],v[1]); return 0; }

img

加密前原始数据:1 2 加密后的数据:3238569099 2059193138 解密后的数据:1 2 Process returned 0 (0x0) execution time : 0.369 s Press any key to continue.

转:

阅读 4.3k发布于 2017-02-19

本作品系 原创 , 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/3be5b0806aa620d43497bec04de0bea9.html