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*/