tea.c

来自「tea c加密算法源码」· C语言 代码 · 共 133 行

C
133
字号
//Written by HappyTown   [2006-10-10]

//Encrypt
TEA_Encrypt(unsigned char *out, unsigned char *data, unsigned char *key)
{
	int i,j;
	unsigned int y=0,z=0,a,b,c,d;
	unsigned int sum = 0;
	unsigned delta = 0x9E3779B9;
	unsigned int k[4] = {0};	//4 part Keys

	//set 4 part Keys
	for (i=0; i<4; i++)
	{
		for(j=3; j>-1; j--)
		{
			k[i] |= key[i*4+j];
			if (j!=0)
			{
				k[i] <<= 8;
			}
		}
	}

	//set y
	for (i=3; i>-1; i--)
	{
		y |= data[i];
		if (i!=0)
		{
			y <<= 8;
		}
	}

	//set z
	for (i=3; i>-1; i--)
	{
		z |= data[i+4];
		if (i!=0)
		{
			z <<= 8;
		}
	}

	//initial a,b,c,d
	a = k[0]; b =k[1]; c = k[2]; d = k[3];

	//encrypt
	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;
	}

	//output y
	for (i=0; i<4; i++)
	{
		out[i] = (y >> (8*i)) & 0xFF;
	}

	//output z
	for (i=0; i<4; i++)
	{
		out[i+4] = (z >> (8*i)) & 0xFF;
	}
}

//Decrypt
TEA_Decrypt(unsigned char *out, unsigned char *data, unsigned char *key)
{
	int i,j;
	unsigned int y=0,z=0,a,b,c,d;
	unsigned int sum = 0xC6EF3720;
	unsigned delta = 0x9E3779B9;
	unsigned int k[4] = {0};	//4 part Keys

	//set 4 part Keys
	for (i=0; i<4; i++)
	{
		for(j=3; j>-1; j--)
		{
			k[i] |= key[i*4+j];
			if (j!=0)
			{
				k[i] <<= 8;
			}
		}
	}

	//set y
	for (i=3; i>-1; i--)
	{
		y |= data[i];
		if (i!=0)
		{
			y <<= 8;
		}
	}

	//set z
	for (i=3; i>-1; i--)
	{
		z |= data[i+4];
		if (i!=0)
		{
			z <<= 8;
		}
	}

	//initial a,b,c,d
	a = k[0]; b =k[1]; c = k[2]; d = k[3];

	//Decrypt
	for(i=0; i<32; i++)
	{
		z -= (y<<4) + c^y + sum^(y>>5) + d;
		y -= (z<<4) + a^z + sum^(z>>5) + b;
		sum -= delta;	
	}

	//output y
	for (i=0; i<4; i++)
	{
		out[i] = (y >> (8*i)) & 0xFF;
	}

	//output z
	for (i=0; i<4; i++)
	{
		out[i+4] = (z >> (8*i)) & 0xFF;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?