背景
车载通信中,涉及到安全相关的功能,会到各种加密算法,而XTEA是比较常见的一种。
关键词:CAPL、XTEA。
XTEA
TEA,Tiny Encryption Algorithm,微型加密算法,是一种易于描述和执行的块密码。
XTEA,eXtended Tiny Encryption Algorithm,是TEA的改进版。
基于CAPL的算法实现
加密的函数代码示例
void XTEAencrypt(dword rounds,dword v[], dword k[])
{
dword sum=0, delta=0x9e3779b9;
dword v0, v1, i;
v0=v[0];
v1=v[1];
for (i=0; i < rounds; i++)
{
v0 += (((v1<<4) ^ (v1>>5)) + v1)^(sum+k[sum & 3]);
sum += delta;
v1 += (((v0<<4) ^ (v0>>5)) + v0)^(sum+k[(sum >> 11) & 3]);
}
v[0]=v0;
v[1]=v1;
}
解密的函数代码示例
void XTEAdecrypt(dword rounds,dword v[], dword k[])
{
dword v0, v1, i;
dword sum, delta=0x9e3779b9;
sum=delta*rounds;
v0=v[0];
v1=v[1];
for (i=0; i < rounds; i++)
{
v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
sum -= delta;
v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
}
v[0]=v0;
v[1]=v1;
}
验证
使用以下变量:
dword Random[2]={0x01, 0x02};
dword Rounds=32;
dword Akey[4]={0x02, 0x02, 0x03, 0x04};
执行和打印:
write("加密前的数据%u,%u",Random[0],Random[1]);
XTEAencrypt(Rounds,Random,Akey);
write("加密后的数据%u,%u",Random[0],Random[1]);
XTEAdecrypt(Rounds,Random,Akey);
write("解密后的数据%u,%u",Random[0],Random[1]);
结果如下:
加密前的数据1,2
加密后的数据1345390024,2801624574
解密后的数据1,2
我是从下面这两篇中学到算法原理的,好东西,多多分享~:
XTEA加密算法实现过程;
TEA、XTEA、XXTEA加密解密算法;
解析 TEA 加密算法(C语言、python);