본문으로 건너뛰기

TEA Encryption Algorithm, TEA 암호화 알고리즘

C++
// Encryption ( 8 Byte )
void encipher( unsigned long const v, unsigned long const w, const unsigned long const k )
{
	register unsigned long y = v[0], z = v[1], sum = 0, delta = 0x9E3779B9, a = k[0], b = k[1], c = k[2], d = k[3], n = 8;
	
	while(n–>0)
	{
		sum += delta;
		y += (z << 4)+a ^ z+sum ^ (z >> 5)+b;
		z += (y << 4)+c ^ y+sum ^ (y >> 5)+d;
	}
	
	w[0] = y; 
	w[1] = z;
}

// Decryption
void decipher( unsigned long const v, unsigned long const w, const unsigned long const k )
{
	register unsigned long y = v[0], z = v[1], sum = 0, delta = 0x9E3779B9, a = k[0], b = k[1], c = k[2], d = k[3], n = 8;
	
	//sum = delta<<5;//, in general sum = delta * n /
	
	sum = delta  n;
	
	while(n–>0)
	{
		z -= (y << 4)+c ^ y+sum ^ (y >> 5)+d;
		y -= (z << 4)+a ^ z+sum ^ (z >> 5)+b;
		sum -= delta;
	}
	
	w[0] = y;
	w[1] = z;
}

/
 *	TEA_EncryptData
 /
unsigned long TEA_EncryptData( char plainData, char encData, unsigned long size , unsigned long key )
{
	unsigned long dwPos = 0;

	for( unsigned long i = 0; i < size; i += 8 )
	{
		encipher( (unsigned long)&plainData[i], (unsigned long)&encData[dwPos], key );
		dwPos += 8;
	}

	return dwPos;
}

/
 *	TEA_DecryptData
 /
unsigned long TEA_DecryptData( char encData, char plainData, unsigned long size, unsigned long key )
{
	unsigned long dwPos = 0;

	for( unsigned long i = 0; i < size; i += 8 )
	{
		decipher( (unsigned long*)&encData[i], (unsigned long*)&plainData[dwPos], key );
		dwPos += 8;
	}

	return dwPos;
}

가볍게 사용하기 좋은 .. Key 기반의 암호화 알고리즘인 TEA 암호화, 복호화 코드입니다.