Greetings guys,
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
RC5.cpp
main.cpp
it's not working !!....
so please if am doing something wrong tell me thnx
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