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 암호화, 복호화 코드입니다.