環(huán)境:
主機:WIN7
開發(fā)環(huán)境:MDK4.72
說明:
在項目中單片機會與服務(wù)器進行網(wǎng)絡(luò)通訊。需要對通訊加密,我選擇了TEA加密算法。
*說明:TEA加密解密算法
*TEA(TinyEncryptionAlgorithm)是一種簡單高效的加密算法,以加密解密速度快,
*實現(xiàn)簡單著稱。
*算法很簡單,TEA算法每一次可以操作64-bit(8-byte),采用128-bit(16-byte)作為key,
*算法采用迭代的形式,
*推薦的迭代輪數(shù)是64輪,最少32輪。
**********************************************************************/
#ifndef_TEA_H_
#define_TEA_H_
/*********************************************************************
*頭文件
**********************************************************************/
#include“header.h”
/*********************************************************************
*函數(shù)
**********************************************************************/
/*********************************************************************
*tea加密
*參數(shù):v:要加密的數(shù)據(jù),長度為8字節(jié)
*k:加密用的key,長度為16字節(jié)
**********************************************************************/
staticvoidtea_encrypt(uint32_t*v,uint32_t*k);
/*********************************************************************
*tea解密
*參數(shù):v:要解密的數(shù)據(jù),長度為8字節(jié)
*k:解密用的key,長度為16字節(jié)
**********************************************************************/
staticvoidtea_decrypt(uint32_t*v,uint32_t*k);
/*********************************************************************
*加密算法
*參數(shù):src:源數(shù)據(jù),所占空間必須為8字節(jié)的倍數(shù)。加密完成后密文也存放在這
*size_src:源數(shù)據(jù)大小,單位字節(jié)
*key:密鑰,16字節(jié)
*返回:密文的字節(jié)數(shù)
**********************************************************************/
uint16_tencrypt(uint8_t*src,uint16_tsize_src,uint8_t*key);
/*********************************************************************
*解密算法
*參數(shù):src:源數(shù)據(jù),所占空間必須為8字節(jié)的倍數(shù)。解密完成后明文也存放在這
*size_src:源數(shù)據(jù)大小,單位字節(jié)
*key:密鑰,16字節(jié)
*返回:明文的字節(jié)數(shù),如果失敗,返回0
**********************************************************************/
uint16_tdecrypt(uint8_t*src,uint16_tsize_src,uint8_t*key);
#endif
tea.c
/*********************************************************************
*TEA算法主文件
*(c)copyright2013,jdh
*AllRightReserved
*文件名:hash.c
*程序員:jdh
**********************************************************************/
/*********************************************************************
*頭文件
**********************************************************************/
#include“tea.h”
/*********************************************************************
*函數(shù)
**********************************************************************/
/*********************************************************************
*tea加密
*參數(shù):v:要加密的數(shù)據(jù),長度為8字節(jié)
*k:加密用的key,長度為16字節(jié)
**********************************************************************/
staticvoidtea_encrypt(uint32_t*v,uint32_t*k)
{
uint32_ty=v[0],z=v[1],sum=0,i;
uint32_tdelta=0x9e3779b9;
uint32_ta=k[0],b=k[1],c=k[2],d=k[3];
for(i=0;i《32;i++)
{
sum+=delta;
y+=((z《《4)+a)^(z+sum)^((z》》5)+b);
z+=((y《《4)+c)^(y+sum)^((y》》5)+d);
}
v[0]=y;
v[1]=z;
}
/*********************************************************************
*tea解密
*參數(shù):v:要解密的數(shù)據(jù),長度為8字節(jié)
*k:解密用的key,長度為16字節(jié)
**********************************************************************/
staticvoidtea_decrypt(uint32_t*v,uint32_t*k)
{
uint32_ty=v[0],z=v[1],sum=0xC6EF3720,i;
uint32_tdelta=0x9e3779b9;
uint32_ta=k[0],b=k[1],c=k[2],d=k[3];
for(i=0;i《32;i++)
{
z-=((y《《4)+c)^(y+sum)^((y》》5)+d);
y -= ((z 《《 4) + a) ^ (z + sum) ^ ((z 》》 5
評論
查看更多