background image

PHP 教程:TEA 算法实现

 算法简单,而且效率高,每次可以操作 8 个字节的数据,加密解密的 KEY 为 16 字节,即包
含 4 个 int 数 据 的 int 型 数 组 , 加 密 轮 数 应 为 8 的 倍 数 , 一 般 比 较 常 用 的 轮 数 为
64,32,16,QQ 原来就是用 TEA16 来还原密码的.
  
  TEA 算法
  
  核心为:
  
  #include<stdint.h>
  
  voidencrypt(uint32_t*v,uint32_t*k){
  
  uint32_tv0=v[0],v1=v[1],sum=0,i;/*setup*/
  
  uint32_tdelta=0x9e3779b9;/*akeyscheduleconstant*/
  
  uint32_tk0=k[0],k1=k[1],k2=k[2],k3=k[3];/*cachekey*/
  
  for(i=0;i<32;i++){/*basiccyclestart*/
  
  sum+=delta;
  
  v0+=((v1<<4)+k0)^(v1+sum)^((v1>>5)+k1);
  
  v1+=((v0<<4)+k2)^(v0+sum)^((v0>>5)+k3);
  
  }/*endcycle*/
  
  v[0]=v0;v[1]=v1;
  
  }
  
  voiddecrypt(uint32_t*v,uint32_t*k){
  
  uint32_tv0=v[0],v1=v[1],sum=0xC6EF3720,i;/*setup*/
  
  uint32_tdelta=0x9e3779b9;/*akeyscheduleconstant*/
  
  uint32_tk0=k[0],k1=k[1],k2=k[2],k3=k[3];/*cachekey*/
  
  for(i=0;i<32;i++){/*basiccyclestart*/