TEA加密算法
TEA(Tiny Encryption Algorithm)算法由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明。它是一种分组密码算法,其明文密文块为64比特,密钥长度为128比特。TEA算法利用不断增加的Delta(黄金分割率)值作为变化,使得每轮的加密是不同,该加密算法的迭代次数可以改变,建议的迭代次数为32轮。
#include <inttypes.h>
#define CYCLE_TIMES_ 32
static void encrypt(uint32_t *v, uint32_t *k) {
uint32_t y = v[0], z = v[1], sum = 0, i; /* set up */
uint32_t delta = 0x9e3779b9; /* a key schedule constant */
uint32_t a = k[0], b = k[1], c = k[2], d = k[3]; /* cache key */
for (i = 0; i < CYCLE_TIMES_; i++) { /* basic cycle start */
sum += delta;
y += ((z << 4) + a) ^ (z + sum) ^ ((z >> 5) + b);
z += ((y << 4) + c) ^ (y + sum) ^ ((y >> 5) + d); /* end cycle */
}
v[0] = y;
v[1] = z;
}
static void decrypt(uint32_t *v, uint32_t *k) {
uint32_t y = v[0], z = v[1], sum = 0xC6EF3720, i; /* set up */
uint32_t delta = 0x9e3779b9; /* a key schedule constant */
uint32_t a = k[0], b = k[1], c = k[2], d = k[3]; /* cache key */
for (i = 0; i < CYCLE_TIMES_; i++) { /* basic cycle start */
z -= ((y << 4) + c) ^ (y + sum) ^ ((y >> 5) + d);
y -= ((z << 4) + a) ^ (z + sum) ^ ((z >> 5) + b);
sum -= delta; /* end cycle */
}
v[0] = y;
v[1] = z;
}
需要注意的是,加密时要不足8位的要补齐。