×
嵌入式开发 > 详情

XXTEA加密算法的原理及其C语言实现

发布时间:2020-07-01 发布时间:
|

在数据的加解密领域,算法分为对称密钥与非对称密钥两种。对称密钥与非对称密钥由于各自的特点,所应用的领域是不尽相同的。对称密钥加密算法由于其速度快,一般用于整体数据的加密,而非对称密钥加密算法的安全性能佳,在数字签名领域得到广泛的应用。

TEA算法是由剑桥大学计算机实验室的David WheelerRoger Needham1994年发明,TEATiny Encryption Algorithm的缩写,以加密解密速度快,实现简单著称。TEA算法每一次可以操作64bit(8byte),采用128bit(16byte)作为key,算法采用迭代的形式,推荐的迭代轮数是64轮,最少32轮。为解决TEA算法密钥表攻击的问题,TEA算法先后经历了几次改进,从XTEABLOCK TEA,直至最新的XXTEAXTEA也称做TEAN,它使用与TEA相同的简单运算,但四个子密钥采取不正规的方式进行混合以阻止密钥表攻击。Block TEA算法可以对32位的任意整数倍长度的变量块进行加解密的操作,该算法将XTEA轮循函数依次应用于块中的每个字,并且将它附加于被应用字的邻字。XXTEA使用跟Block TEA相似的结构,但在处理块中每个字时利用了相邻字,且用拥有两个输入量的MX函数代替了XTEA轮循函数。本文所描述的安全机制采用的加密算法就是TEA算法中安全性能最佳的改进版本-XXTEA算法。

XTEA算法的一轮加密过程如图1所示:

XXTEA算法的结构非常简单,只需要执行加法、异或和寄存的硬件即可,且软件实现的代码非常短小,具有可移植性,非常适合嵌入式系统应用。由于XXTEA算法的以上优点,可以很好地应用于嵌入式RFID系统当中。

XXTEA算法的C语言表达:

#defineMX(z>>5^y2) + (y>>3^z4)^(sum^y) + (k[p3^e]^z);

longbtea(long* v, long n, long* k)

{unsigned long z=v[n-1], y=v[0], sum=0, e, DELTA=0x9e3779b9;long p, q ;

if (n > 1) {/*加密过程*/

q = 6 + 52/n;

while (q-- > 0)

{sum += DELTA;e = (sum >> 2) 3;

for (p=0; pn-1; p++)y = v[p+1],z = v[p] += MX;

y = v[0];z = v[n-1] += MX;}

return 0 ;

} else if (n -1) {/*解密过程*/

n = -n;q = 6 + 52/n;sum = q*DELTA ;

while (sum != 0) { 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; }

return 0; }return 1; }

上述算法描述中,v表示为运算的长整型数据的首地址,k为长整型的密钥的首地址,n表示要要运算的组元个数,正表示加密,负表示解密。N是以32bit为基本单位的组元个数。

订正:对于加密的示意图,在Xr-1到>>3那里,是不经历异或的运算的。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
五大标准轻松搞定4K超高清电视选购