⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tea.c

📁 tea c加密算法源码
💻 C
字号:
//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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -