访问电脑版页面

导航:老古开发网手机版51单片机51单片机Keil C51编程

XXTEA加密算法的KEIL C实现

导读: 本内容提供了XXTEA加密算法的KEIL C实现,详细列出了程序共大家学习
关键字:
XXTEA,加密算法,Keil,C

 

#include  <string.h>
#include  <stdio.h>
#include  <absacc.h>
#include  <intrins.h>

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

#define  delta     0x9e3779b9

/* 注意:delta的取值是随机的,但是为了避免不良的取值,采取的是
黄金分割数(根号5-2)/2与2的32次方的乘积。为0x9e3779b9。   
在解密中,sum=delta×round,如:delta×32=13C6EF3720*/     
//unsigned long buffer[];
//unsigned long keybuffer[]; 

long btea(long* v,char n,long* k);

long  btea(long* v, char n, long* k) 

    unsigned long z=v[n-1], y=v[0], sum=0, e, DELTA=0x9e3779b9;
    long p, q ;
    if (n > 1) 
 {          
 /* Coding Part */
      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) 
 {  
  /* Decoding Part */
      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  main()
 {
 unsigned long plainbuffer[2];
 unsigned long testbuffer[4];
 unsigned long plain[2]={0x23FF28AA,0xA76B4B04 };
 unsigned long test[4]={0x01122334,0x45566778,0x899AABBC,0xCDDEEFF0};
 unsigned long key[4]={0x01234567,0x89ABCDEF,0x01234567,0x89ABCDEF};

 while(1)
 {
  memcpy(plainbuffer,plain,8);
  memcpy(testbuffer,test,16);
  btea(plainbuffer, 2,key);
  btea(plainbuffer, -2,key);
  btea(testbuffer, 4,key);
  btea(testbuffer, -4,key);
  _nop_;
 // btea(buffer, -2,keybuffer);

  }
}

来源:   作者:叶子  2011/8/25 17:57:00
栏目: [ 51单片机Keil C51编程]

相关阅读

几种码制转换 BCD TO HEX,HEX TO BCD ,BIN TO HEX

让Ultra Edit和Keil结合的更紧密

在KEIL C51上仿真完了,怎样生成HEX文件去烧写??

在Keil c51调试中,如何查看外部存储器XDATA?

Keil C51中如何实现代码优化?

C51中 INT 转换为 2个CHAR?

proteus与keil的完美结合(没有开发板,让你也学的爽!)

[转载]C51中断处理过程

Keil C51编译错误总结

C51 的重入问题 WARNING L15: MULTIPLE CALL TO SEGMENT(转)

keil 7.0编译出现:error C316: unterminated conditionals

51单片机CO2检测显示程序解析

Keil C51单片机中变量的使用方法解析

MCS51单片机程序设计时堆栈的计算方法解析

那位大虾能告诉我C51 的printf()函数有什么用?

C51单片机的几种常用延时程序设计

在Keil c51调试中,如何查看特殊寄存器?

volatile的用法

一文知道keil编译程序的过程

SBUF=0x65,c=SBUF结果为c=0???