⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encryptxormodule.cc

📁 五行MMORPG引擎系统V1.0
💻 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 + -