tea算法

tea算法

        在安全学领域,TEA(Tiny Encryption Algorithm)是一种分组加密算法,它的实现非常简单,通常只需要很精短的几行代码。TEA 算法最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham 在 1994 年设计的。   
       TEA算法使用64位的明文分组和128位的密钥,它使用Feistel分组加密框架,需要进行 64 轮迭代,尽管作者认为 32 轮已经足够了。该算法使用了一个神秘常数δ作为倍数,它来源于黄金比率,以保证每一轮加密都不相同。但δ的精确值似乎并不重要,这里 TEA 把它定义为 δ=「(√5 - 1)231」(也就是程序中的0X9E3779B9)。   
        之后 TEA 算法被发现存在缺陷,作为回应,设计者提出了一个 TEA 的升级版本——XTEA(有时也被称为“tean”)。XTEA 跟 TEA 使用了相同的简单运算,但它采用了截然不同的顺序,为了阻止密钥表攻击,四个子密钥(在加密过程中,原 128 位的密钥被拆分为 4 个 32 位的子密钥)采用了一种不太正规的方式进行混合,但速度更慢了。

[cpp] view plain copy print ?
  1. //C语言的Tea算法(原始):      
  2. void encrypt (uint32_t* v, uint32_t* k)  
  3. {    
  4.      uint32_t v0=v[0], v1=v[1], sum=0, i; /* set up */    
  5.       uint32_t delta=0x9e3779b9; /* a key schedule constant */    
  6.        uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */    
  7.         for (i=0; i < 32; i++)   
  8.         { /* basic cycle start */     
  9.             sum += delta;    
  10.              v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);    
  11.               v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);    
  12.         } /* end cycle */    
  13.          v[0]=v0; v[1]=v1;     
  14. }    
  15.   
  16.  void decrypt (uint32_t* v, uint32_t* k)   
  17.  {    
  18.       uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i; /* set up */    
  19.        uint32_t delta=0x9e3779b9; /* a key schedule constant */    
  20.         uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */   
  21.           for (i=0; i<32; i++)   
  22.           { /* basic cycle start */    
  23.                v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);    
  24.                 v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);    
  25.                  sum -= delta;    
  26.           } /* end cycle */    
  27.            v[0]=v0; v[1]=v1;    
  28. }  

  

你可能感兴趣的:(tea算法)