📄 encryptxormodule.cc
字号:
// EncryptXORModule.cc
/*/////////////////////////////////////////////////////////////////////////////
李亦
2006.06.
/*//////////////////////////////////////////////////////////////////////////////
//#include "platforms.h"
#include "server/encrypt/encryptEngine.h"
#include "server/encrypt/EncryptXORModule.h"
#include "server/net/IOSocket.h"
namespace CS
{
#define CS_XORKEY "GWGame RPG"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//CS_ENCRYPTHANDLER EncryptXORModule::m_encryptEngine={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
char EncryptXORModule::m_szXORKey[256];
static EncryptXORModule gs_xorEncrypt;
EncryptXORModule::EncryptXORModule()
{
dStrcpy(m_szXORKey,CS_XORKEY);
m_encryptEngine.pInsert = Insert;
m_encryptEngine.pRemove = Remove;
m_encryptEngine.pQuery = Query;
m_encryptEngine.pStartup = Startup;
m_encryptEngine.pShutdown = Shutdown;
m_encryptEngine.pSetEncryptKey= SetEncryptKey;
m_encryptEngine.pSetDecryptKey= SetDecryptKey;
m_encryptEngine.pGetEncryptKey= GetEncryptKey;
m_encryptEngine.pGetDecryptKey= GetDecryptKey;
m_encryptEngine.pEncrypt = Encrypt;
m_encryptEngine.pDecrypt = Decrypt;
m_encryptEngine.pCreateNewKeys= CreateNewKeys;
m_encryptEngine.pFree = Free;
}
EncryptXORModule::~EncryptXORModule()
{
}
CS_ENCRYPTHANDLER *EncryptXORModule::GetEncryptEngine(void)
{
return &gs_xorEncrypt.m_encryptEngine;
//return &m_encryptEngine;
}
int RPGAPI2 EncryptXORModule::Insert(void)
{
if(dStrlen(m_szXORKey) == 0)
return E_IOFAILED;
return E_IOOK;
}
int RPGAPI2 EncryptXORModule::Remove(void)
{
return E_IOOK;
}
char * RPGAPI2 EncryptXORModule::Query(void)
{
return "XOR: BO2K Simple XOR Encryption";
}
void * RPGAPI2 EncryptXORModule::Startup(void)
{
char *svKey=m_szXORKey;
if(svKey[0]=='\0')
return NULL;
XORENCRYPT_DATA *data;
data=(XORENCRYPT_DATA *)dMalloc(sizeof(XORENCRYPT_DATA));
if(data==NULL)
return NULL;
SetEncryptKey((void *)data,svKey);
return data;
}
int RPGAPI2 EncryptXORModule::Shutdown(void *pInternal)
{
XORENCRYPT_DATA *data=(XORENCRYPT_DATA *)pInternal;
dFree(data);
return E_IOOK;
}
int RPGAPI2 EncryptXORModule::SetEncryptKey(void *pInternal, char *svKey)
{
XORENCRYPT_DATA *data=(XORENCRYPT_DATA *)pInternal;
char *svKeyPtr=svKey;
DWORD key;
key=0xCDC31337;
while((*svKeyPtr)!=0)
{
key=LROTL(key,8);
key+=(*svKeyPtr);
svKeyPtr++;
}
data->dwXORKey=key;
dStrncpy(data->svXORKey,svKey,46);
return E_IOOK;
}
int RPGAPI2 EncryptXORModule::SetDecryptKey(void *pInternal, char *svKey)
{
XORENCRYPT_DATA *data=(XORENCRYPT_DATA *)pInternal;
char *svKeyPtr=svKey;
DWORD key;
key=0xCDC31337;
while((*svKeyPtr)!=0)
{
key=LROTL(key,8);
key+=(*svKeyPtr);
svKeyPtr++;
}
data->dwXORKey=key;
dStrncpy(data->svXORKey,svKey,46);
return E_IOOK;
}
char * RPGAPI2 EncryptXORModule::GetEncryptKey(void *pInternal)
{
XORENCRYPT_DATA *data=(XORENCRYPT_DATA *)pInternal;
return data->svXORKey;
}
char * RPGAPI2 EncryptXORModule::GetDecryptKey(void *pInternal)
{
XORENCRYPT_DATA *data=(XORENCRYPT_DATA *)pInternal;
return data->svXORKey;
}
BYTE * RPGAPI2 EncryptXORModule::Encrypt(void *pInternal, BYTE *pBuffer,int nBufLen,int *pnOutBufLen)
{
XORENCRYPT_DATA *data=(XORENCRYPT_DATA *)pInternal;
BYTE *buf;
int i;
buf=(BYTE *)dMalloc(nBufLen);
if(buf==NULL)
return NULL;
for(i=0;i<nBufLen;i++)
{
buf[i]=(pBuffer[i] ^ (BYTE)(data->dwXORKey >> (8*(i&3))) );
}
*pnOutBufLen = nBufLen;
return buf;
}
BYTE * RPGAPI2 EncryptXORModule::Decrypt(void *pInternal, BYTE *pBuffer,int nBufLen,int *pnOutBufLen)
{
XORENCRYPT_DATA *data=(XORENCRYPT_DATA *)pInternal;
BYTE *buf;
int i;
buf=(BYTE *)dMalloc(nBufLen);
if(buf==NULL)
return NULL;
for(i=0;i<nBufLen;i++)
{
buf[i]=(pBuffer[i] ^ (BYTE)(data->dwXORKey >> (8*(i&3))) );
}
*pnOutBufLen=nBufLen;
return buf;
}
int RPGAPI2 EncryptXORModule::CreateNewKeys(void *pInternal)
{
XORENCRYPT_DATA *data=(XORENCRYPT_DATA *)pInternal;
return E_IOOK;
}
void RPGAPI2 EncryptXORModule::Free(void *pInternal, BYTE *pBuffer)
{
XORENCRYPT_DATA *data=(XORENCRYPT_DATA *)pInternal;
dFree(pBuffer);
}
};//namespace CS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -