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