打印
[Cortex-M0技术交流]

基于新唐M0的XXTEA加密解密算法源码

[复制链接]
6402|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
缥缈九哥|  楼主 | 2013-2-22 09:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于新唐M0的XXTEA加密解密算法源码

/*---------------------------------------------------------------------------------------------------------
    在数据的加解密领域,算法分为对称密钥与非对称密钥两种。对称密钥与非对称密钥由于各自的特点,所应用的领域是不尽相
同的。对称密钥加密算法由于其速度快,一般用于整体数据的加密,而非对称密钥加密算法的安全性能佳,在数字签名领域得到广
泛的应用。
    TEA算法是由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明,TEA是Tiny Encryption Algorithm的缩写,
以加密解密速度快,实现简单著称。TEA算法每一次可以操作64bit(8byte),采用128bit(16byte)作为key,算法采用迭代的形式,
推荐的迭代轮数是64轮,最少32轮。为解决TEA算法密钥表攻击的问题,TEA算法先后经历了几次改进,从XTEA到BLOCK TEA,直至
最新的XXTEA。XTEA也称做TEAN,它使用与TEA相同的简单运算,但四个子密钥采取不正规的方式进行混合以阻止密钥表攻击。
    Block TEA算法可以对32位的任意整数倍长度的变量块进行加解密的操作,该算法将XTEA轮循函数依次应用于块中的每个字,并且
将它附加于被应用字的邻字。XXTEA使用跟Block TEA相似的结构,但在处理块中每个字时利用了相邻字,且用拥有两个输入量的
MX函数代替了XTEA轮循函数。本文所描述的安全机制采用的加密算法就是TEA算法中安全性能最佳的改进版本-XXTEA算法。
    XXTEA算法的结构非常简单,只需要执行加法、异或和寄存的硬件即可,且软件实现的代码非常短小,具有可移植性,非常适合
嵌入式系统应用。由于XXTEA算法的以上优点,可以很好地应用于嵌入式RFID系统当中。
---------------------------------------------------------------------------------------------------------*/
#include <string.h>
#include <stdio.h>

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

//注意:delta的取值是随机的,但是为了避免不良的取值,采取的是
//黄金分割数(根号5-2)/2与2的32次方的乘积。为0x9e3779b9。   
//在解密中,sum=delta×round,如:delta×32=13C6EF3720
   
//v表示为运算的长整型数据的首地址
//k为长整型的密钥的首地址
//n表示以32bit为基本单位的要运算的组元个数,正表示加密,负表示解密

long xxtea(long* v, long n, long* k);

long xxtea(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<n-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;
}

void  xxtea_test(void)
{
unsigned long buff[4];
unsigned long test[4]={0x11223344,0x55667788,0x99AABBCC,0xDDEEFF00};
unsigned long keys[4]={0x12345678,0x9ABCDEF0,0x12345678,0x9ABCDEF0};

while(1)
{
  printf("\n\rxxtea test: \n\r");
  memcpy(buff,test,16); printf("0x%08x,0x%08x,0x%08x,0x%08x\n\r",buff[0],buff[1],buff[2],buff[3]);
  xxtea( buff, 4,keys); printf("0x%08x,0x%08x,0x%08x,0x%08x\n\r",buff[0],buff[1],buff[2],buff[3]);
  xxtea( buff,-4,keys); printf("0x%08x,0x%08x,0x%08x,0x%08x\n\r",buff[0],buff[1],buff[2],buff[3]);
  
  while(1);
}
}

//--缥缈九哥收集整理 xxtea.rar (1.77 KB)

相关帖子

沙发
dirtwillfly| | 2013-2-22 11:44 | 只看该作者
沙发,学习下

使用特权

评论回复
板凳
xyz549040622| | 2013-2-25 18:49 | 只看该作者
九哥也研究密码去了

使用特权

评论回复
地板
缥缈九哥|  楼主 | 2013-2-26 15:04 | 只看该作者
现在 研究 DSA,RSA,MD5 SHA,很有难度呀,谁能提供些成熟的源码?

使用特权

评论回复
5
乡村男孩| | 2013-2-27 10:38 | 只看该作者
9G被菜农忽悠到密界了?

使用特权

评论回复
6
缥缈九哥|  楼主 | 2013-2-27 11:03 | 只看该作者
不是菜农。,我有个客户的产品 要用到。

使用特权

评论回复
7
zhangbinbin| | 2013-2-27 11:15 | 只看该作者
那么牛人,这个搞研发的活吧,你做销售也做技术吗

使用特权

评论回复
8
缥缈九哥|  楼主 | 2013-2-27 11:20 | 只看该作者
我做推广,做技术支持,当然也算是有研发的成份。现在我做中颖的8051和新唐的M0等推广及支持。

使用特权

评论回复
9
TLMPCB| | 2013-2-27 11:21 | 只看该作者
学习下

使用特权

评论回复
10
hnhxk2983| | 2013-3-30 14:41 | 只看该作者
学习下

使用特权

评论回复
11
zhyscout| | 2013-4-23 20:36 | 只看该作者

感谢分享!

使用特权

评论回复
12
zhyscout| | 2013-4-23 20:36 | 只看该作者

感谢分享!

使用特权

评论回复
13
racinglam| | 2013-6-9 17:45 | 只看该作者
xxtea有研究过,其中unsigned long z=v[n-1], 最好放在分支里,如果当n为负数时, MCU很容易会出现bus error

使用特权

评论回复
14
wjsjdeng| | 2013-6-21 11:56 | 只看该作者
顶9g,,学习下。。

使用特权

评论回复
15
wm20031015| | 2013-8-12 12:27 | 只看该作者
好资料,顶起

使用特权

评论回复
16
ahnusunwu| | 2013-8-28 00:18 | 只看该作者
学习一下,研究密码!

使用特权

评论回复
17
sunbingbing| | 2013-8-28 08:19 | 只看该作者
学习一下

使用特权

评论回复
18
giant0113| | 2013-10-26 17:09 | 只看该作者

使用特权

评论回复
19
wx85105157| | 2014-3-5 21:17 | 只看该作者
XXTEA是对称加密

使用特权

评论回复
20
hiwcb| | 2014-3-9 00:37 | 只看该作者
DSA,RSA,MD5, SHA    新唐m0有硬件加速吗?上含dsp的m4吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:童时不懂世事艰,笑谈学成锦衣还。岁月无声已先过,男儿有泪空自弹。    莫待沾霜愁上发,须嬴吐气喜开颜。拼搏半年誓如愿,不到长城心不甘。

67

主题

1871

帖子

270

粉丝