1. 程式人生 > 其它 >一種輕量級對稱加密演算法TEA

一種輕量級對稱加密演算法TEA

技術標籤:演算法

簡介

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升級檔案的加密