简介
TEA算法由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明。它是一种分组密码算法,其明文密文块为64比特,密钥长度为128比特。TEA算法利用不断增加的Delta(黄金分割率)值作为变化,使得每轮的加密值不同。虽然TEA算法比 DES(Data Encryption Standard) 要简单得多, 但有很强的抗差分分析能力,加密速度也比 DES 快得多,比较试用于一些低性能处理器场合
加密算法
unsigned int key[4] = { 0xA91B,0x8F61,0x15FF,0xF251}; //Tea加密秘钥,可自定定义
/*
*加密过程操作最小单位为4个Byte(unsigned int)
*/
//加密过程
void Encrypt(unsigned int* v, unsigned int* k)
{
unsigned int v0 = v[0], v1 = v[1], sum = 0, i; /* set up */
unsigned int delta = 0x9e3779b9; /* a key schedule constant */
unsigned int 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(unsigned int* v, unsigned int* k)
{
unsigned int v0 = v[0], v1 = v[1], sum = 0xC6EF3720, i; /* set up */
unsigned int delta = 0x9e3779b9; /* a key schedule constant */
unsigned int 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;
}
void Encrypt_UseDefaultKey(unsigned int* v)
{
Encrypt(v, key);
}
void Decrypt_UseDefaultKey(unsigned int* v)
{
Decrypt(v, key);
}
测试代码
int main(void)
{
unsigned int test = 0xAABBCCDD;
printf("原始数据为\t\t0x%08X\r\n", test);
Encrypt_UseDefaultKey(&test);
printf("加密后的数据为\t\t0x%08X\r\n", test);
Decrypt_UseDefaultKey(&test);
printf("解密后的数据为\t\t0x%08X\r\n", test);
while (1);
}
代码输出结果
一般使用场景
- 某段数据存储过程进行加密
- 数据传输通讯过程进行加密
- IAP升级文件的加密