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

发布者:国宝集团最新更新时间:2011-08-27 关键字:XXTEA加密算法  C语言 手机看文章 扫描二维码
随时随地手机看文章

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

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语言表达:

#define              MX           (z>>5^y<<2) + (y>>3^z<<4)^(sum^y) + (k[p&3^e]^z);

long        btea(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; 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那里,是不经历异或的运算的。

关键字:XXTEA加密算法  C语言 引用地址:XXTEA加密算法的原理及其C语言实现

上一篇:基于C8051F020和Atmegal6的无线测温系统设计
下一篇:基于ATmega32的SD卡上FAT32文件系统数据读取

推荐阅读最新更新时间:2024-03-16 12:40

单片机提高C语言代码效率的方法
代码效率包括两个方面内容:代码的大小和代码执行速度。如果代码精简和执行速度快,我们就说这个代码效率高。一般情况下,代码精简了速度也相应提上来了。单片机的ROM和RAM的空间都很有限,当您编程时遇到单片机的ROM和RAM的不够用的时候,或者您的程序要求较高的执行速度时,我们就得面对解决代码效率问题了。如何提高代码效率?现笔者以一个LED闪烁的程序为例与您探讨。 #i nclude reg52.h //包含头文件 sbit led=P2^0;//定义位变量led,使其关联单片机管脚P2.0 void Delayms(unsigned int t);//定义延时函数 int main(void)//主函数(C语言程序入口函数) {
[单片机]
单片机C语言精确延时分析
前阵子 琢磨了 ds18b20 温度测控芯片 一直对单片机的延时问题 留有疑惑 花了一下午时间 用 keil 逐步调试和proteus 仿真 对延时问题 做了一些分析 通常 单片机在对时间要求精确的情况下 会使用汇编 来实现相应的模块 通过计算其相应的机器周期 命令执行周期 可以得到精确的时间控制 C语言下 常用的延时 方法 有 for 循环 和 while() 循环 和 定时器延时 但是使用 for 循环 得到的延时效果 不够精确 执行一次 可能会有 10多us 原因已经有人 做了分析 一般单片机 C语言编程 需要经过 编译 将其 转为 汇编代码后 再生成16进制文件 在keil 下 点击菜单栏 flash - Configur
[单片机]
单片机<font color='red'>C语言</font>精确延时分析
ARM9之2440时钟
其实ARM9并没有什么了不起的,和ARM7,6基本是一样的,裸奔起来并没有什么不同,个人感觉八错!倒是那万能的C语言却是真的! U32 val; U8 m, p, s; val = rMPLLCON; m = (val 12)&0xff; p = (val 4)&0x3f; s = val&3; //(m+8)*FIN*2 不要超出32位数! FCLK = ((m+8)*(FIN/100)*2)/((p+2)*(1 s))*100; val = rCLKDIVN; m = (val 1)&3; p = val&1; val = rCAMDIVN; s = val 8; switch (m) { case 0: HC
[单片机]
一款51单片机电子钟制作(C语言
/*一款电子钟程序,此电子钟是四位电子钟数码管组成的,功能分别有走时、响闹、走时间调整、闹钟时间调整等功能!调整部分分别由三个按键实现,一个功能键,一个+(加)键,另一个为-(减)键,其它功能键是复用功能!*/ 硬键介绍:数码管个位.十位.百位.千位.小数点分别接P0.0 P0.1 P0.2 P0.3 P0.4。蜂鸣器接P3.5脚,功能按键接P3.2 加按键接P3.3 减按键接P3.4 以下是两张图片!!! #include reg52.h //头文件 #define uchar unsigned char//宏定义 #define uint unsigned int//宏定义 uchar shi,fen,nshi,nfe
[单片机]
一款51单片机电子钟制作(<font color='red'>C语言</font>)
单片机C语言的位操作
由于PIC处理器对位操作是最高效的,所以把一些BOOL变量放在一个内存的位中,既可以达到运算速度快,又可以达到最大限度节省空间的目的。 在C中的位操作有多种选择。 ********************************************* 如:char x;x=x|0B00001000; /*对X的4位置1。*/ char x;x=x&0B11011111; /*对X的5位清0。*/ 把上面的变成公式则是: #define bitset(var,bitno)(var |=1 bitno) #define bitclr(var,bitno)(var &=~(1 bitno)) 则上面的操作就是:
[单片机]
51系列-C语言控制逐级娱乐
注意51系列8位(bit)一个字节,应用汇编语言简洁高效。16位的处理器需要用0000 0000H 表示。16或32位以上,使用操作系统(WinCE、Linux等)更有效,可以利用大量的、底层的、专业化、标准化的面向控制的库函数(如:API等)。高级语言具有对底层硬件的无关性,则可移植性好、可重用性好;高级语言描述控制更接近人的自然语言,可描述性好,表达力好。Linux的代码与模块的开放性、可剪裁性、自我构造等特点使其前景广阔。 1.单个LED灯,单个按键 //C语言的头文件 //这是第一种注释方式; //预处理命令 #include #define uchar uns
[单片机]
51系列-<font color='red'>C语言</font>控制逐级娱乐
PCF8583+LM1602的protues仿真实例(C语言
程序代码: #include reg51.h #include intrins.h #include absacc.h #define lcdwritecmd XBYTE #define ledwritedat XBYTE sbit SCL=P1^0 ; sbit SDA=P1^1 ; char tab ; unsigned char year,mon,day,hour,min,sec,state,hudsec; //============================延时函数==================================== void delay(unsigned char n) {
[单片机]
编写单片机C语言代码的技巧和经验
  下面发一些我在网上看到的单片机C语言代码编写技巧和自己的一些经验来和大家分享;   1、如果可以的话少用库函数,便于不同的mcu和编译器间的移植   2、选择合适的算法和数据结构   应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍。将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大提高程序执行的效率。选择一种合适的数据结构也很重要,比如你在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分密码的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。对于大部分的编译器,
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved