LGT8F328 在 Arduino 下使TEA加密解密
在網上看到一篇很好的 TEA 加密文章,把它移植到Arduino上跟大家分享。/*******************
TEA加密解密演算法
Refeerence: http://www.51hei.com/bbs/dpj-137887-1.html
*******************/
#define DATA_LEN 32
#define MX (z>>5^y<<2)+(y>>3^z<<4)^(sum^y)+(k^z)
#define DELTA 0x9e3779b9
#define S_LOOPTIME 1 //5
#define BLOCK_SIZE DATA_LEN //PAGE_SIZE,根據你所要加密的資料包長度修改此參數(單位:位元組)
unsigned char TEA_key =
{
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10
};
//數據緩衝區
unsigned char TX_buffer;
unsigned char RX_buffer;
/*加密時使用函數, buf裡面的內容就是加密後的資料,key是加密金鑰*/
void btea_encrypt( unsigned char* buf, unsigned char* key )
{
unsigned charn = BLOCK_SIZE / 4;
unsigned long *v = (unsigned long *)buf;
unsigned long *k = (unsigned long *)key;
unsigned long z = v, y = v, sum = 0, e ;
unsigned char p, q ;
// Coding Part
q = S_LOOPTIME + 52 / n ;
while ( q-- > 0 )
{
sum += DELTA ;
e = sum >> 2 & 3 ;
for ( p = 0 ; p < n - 1 ; p++ )
{
y = v;
z = v += MX;
}
y = v ;
z = v += MX;
}
}
/*解密時使用函數, buf裡面的內容就是解密後的資料,key是解密金鑰*/
void btea_decrpyt( unsigned char* buf, unsigned char* key )
{
unsigned char n = BLOCK_SIZE / 4;
unsigned long *v = (unsigned long *)buf;
unsigned long *k = (unsigned long *)key;
unsigned long z = v, y = v, sum = 0, e ;
unsigned charp, q ;
//Decoding Part...
q = S_LOOPTIME + 52 / n ;
sum = q * DELTA ;
while ( sum != 0 )
{
e = sum >> 2 & 3 ;
for ( p = n - 1 ; p > 0 ; p-- )
{
z = v;
y = v -= MX;
}
z = v ;
y = v -= MX;
sum -= DELTA ;
}
}
/************************************************************************************************************/
void CreateBUF(unsigned char *buf)
{
int i = 0;
for (i = 0; i < DATA_LEN; i++)
{
buf = rand() % 255;
}
}
void Trans(unsigned char *buf1, unsigned char *buf2)
{
int i = 0;
for (i = 0; i < DATA_LEN; i++)
{
buf2 = buf1;
}
}
void DIS(unsigned char sts, unsigned char*buf)
{
int i = 0;
Serial.print("\n");
switch (sts)
{
case 0: Serial.print("實際發送陣列:"); break;
case 1: Serial.print("加密資料陣列:"); break;
case 2: Serial.print("實際接收陣列:"); break;
default: break;
}
for (i = 0; i < DATA_LEN; i++)
{
Serial.print(buf);
}
Serial.print("\n");
}
void setup() {
// put your setup code here, to run once:
Serial.begin(57600);
}
void loop() {
// put your main code here, to run repeatedly:
//srand((time(NULL)));
CreateBUF(TX_buffer); //生成一組亂數
DIS(0, TX_buffer); //顯示實際資料
btea_encrypt(TX_buffer, TEA_key); //發送陣列加密
DIS(1, TX_buffer); //顯示加密後的資料
Trans(TX_buffer, RX_buffer); //類比通道
btea_decrpyt(RX_buffer, TEA_key); //接收陣列解密
DIS(2, RX_buffer); //顯示接收資料
//return 0;
while(1){};
}
輸出的結果
页:
[1]