i was working on my own server and am coding it in c++, i heared i must decrypt the msg from the client so i can check if the user is exist or not (geting server name,account id and password) .
so i was wondering if someone can help me and correct what am doing wrong here is my code hopefully someone can help me
RC5.h
Code:
#ifndef RC5_H
#define RC5_H
#define RC5_32 32
#define RC5_12 12
#define RC5_SUB (RC5_12*2 + 2)
#define RC5_16 16
#define RC5_KEY (RC5_16/4)
const unsigned long RC5_PW32 = 0xB7E15163;
const unsigned long RC5_QW32 = 0x61C88647;
const unsigned char RC5PASSWORD_KEY[16] = { 0x3C, 0xDC, 0xFE, 0xE8, 0xC4, 0x54, 0xD6, 0x7E,
0x16, 0xA6, 0xF8, 0x1A, 0xE8, 0xD0, 0x38, 0xBE };
const unsigned char RC5BARPASSWORD_KEY[16] = { 0x44, 0xD0, 0xE2, 0xBA, 0x4A, 0x38, 0x14, 0x44,
0x64, 0xE0, 0x12, 0xAE, 0xDA, 0x56, 0x1C, 0xF8 };
////////////////////////////////////////////////////////////////////////////////////////////////
class CRc5
{
public:
void Rc5InitKey(const unsigned char bufKey[RC5_16]);
void Rc5Encrypt(void* buf, int nLen8);
void CRc5::Rc5Decrypt(void* buf, int nLen8);
protected:
unsigned long m_bufKey[RC5_KEY];
unsigned long m_bufSub[RC5_SUB];
};
#endif // RC5_H
Code:
#include "RC5.h"
unsigned long rotate_left(unsigned long nData, unsigned long nCount);
unsigned long rotate_right(unsigned long nData, unsigned long nCount);
void CRc5::Rc5InitKey(const unsigned char bufKey[RC5_16])
{
try{
memcpy(m_bufKey, bufKey, RC5_16);
}catch(...) {
#ifdef _DEBUG
assert(!"InitRc5Key()");
#endif
}
m_bufSub[0] = RC5_PW32;
for(int i = 1; i < RC5_SUB; i++)
{
m_bufSub[i] = m_bufSub[i-1] + RC5_QW32;
}
int i, j;
unsigned long x, y;
i = j = x = y = 0;
for(int k = 0; k < 3 * __max(RC5_KEY, RC5_SUB); k++)
{
m_bufSub[i] = rotate_left((m_bufSub[i] + x + y), 3);
x = m_bufSub[i];
i = (i + 1) % RC5_SUB;
m_bufKey[j] = rotate_left((m_bufKey[j] + x + y), (x + y));
y = m_bufKey[j];
j = (j + 1) % RC5_KEY;
}
}
void CRc5::Rc5Encrypt(void* buf, int nLen8)
{
assert(nLen8 % 8 == 0);
nLen8 = (nLen8/8) * 8;
if(nLen8 <= 0)
return;
unsigned long* bufData = (unsigned long*)buf;
for(int k = 0; k < nLen8/8; k++)
{
unsigned long a = bufData[2*k];
unsigned long b = bufData[2*k + 1];
unsigned long le = a + m_bufSub[0];
unsigned long re = b + m_bufSub[1];
for(int i = 1; i <= RC5_12; i++)
{
le = rotate_left((le ^ re), re) + m_bufSub[2*i];
re = rotate_left((re ^ le), le) + m_bufSub[2*i + 1];
}
bufData[2*k] = le;
bufData[2*k + 1] = re;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////
void CRc5::Rc5Decrypt(void* buf, int nLen8)
{
assert(nLen8 % 8 == 0);
nLen8 = (nLen8/8) * 8;
if(nLen8 <= 0)
return;
unsigned long* bufData = (unsigned long*)buf;
for(int k = 0; k < nLen8/8; k++)
{
unsigned long ld = bufData[2*k];
unsigned long rd = bufData[2*k + 1];
for(int i = RC5_12; i >= 1; i--)
{
rd = rotate_right((rd - m_bufSub[2*i + 1]), ld) ^ ld;
ld = rotate_right((ld - m_bufSub[2*i]), rd) ^ rd;
}
unsigned long b = rd - m_bufSub[1];
unsigned long a = ld - m_bufSub[0];
bufData[2*k] = a;
bufData[2*k + 1] = b;
}
}
unsigned long rotate_left(unsigned long nData, unsigned long nCount)
{
return (nData << (nCount & 0x1F) | nData >> 0x20 - (nCount & 0x1F));
}
////////////////////////////////////////////////////////////////////////////////////////////////
unsigned long rotate_right(unsigned long nData, unsigned long nCount)
{
return (nData << (nCount & 0x1F) | nData >> 0x20 - (nCount & 0x1F));
}
Code:
//all the stuff..... char buf[4000]; recv(sConnect,buf,sizeof(buf),0); CRc5 dec; dec.Rc5Decrypt(buf,sizeof(buf));
so please if am doing something wrong tell me thnx






