我是靠谱客的博主 自由服饰,最近开发中收集的这篇文章主要介绍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. }  
//C语言的Tea算法(原始):   
void encrypt (uint32_t* v, uint32_t* k)
{  
	 uint32_t v0=v[0], v1=v[1], sum=0, i; /* set up */  
	  uint32_t delta=0x9e3779b9; /* a key schedule constant */  
	   uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */  
	    for (i=0; i < 32; i++) 
		{ /* basic cycle start */   
			sum += delta;  
			 v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);  
			  v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);  
	    } /* end cycle */  
		 v[0]=v0; v[1]=v1;   
}  

 void decrypt (uint32_t* v, uint32_t* k) 
 {  
	  uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i; /* set up */  
	   uint32_t delta=0x9e3779b9; /* a key schedule constant */  
	    uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */ 
		  for (i=0; i<32; i++) 
		  { /* basic cycle start */  
			   v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);  
			    v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);  
				 sum -= delta;  
		  } /* end cycle */  
		   v[0]=v0; v[1]=v1;  
}

  

最后

以上就是自由服饰为你收集整理的tea算法的全部内容,希望文章能够帮你解决tea算法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部