Easy to find and dont need some 'QStrings' -.-
again i triple facepalmed and release that (again)
i guess 80% ragezoners does not know "from where the hell i have that" ...
here is reply for these questions: you dont know what you have, you should stand up turn around and go away
[header]
Code:
#define _XOR_LIB_H_
#define SIZE_MAX_XOR_DATA_TO_STRING 500
#define SIZE_MAX_XOR_KEY_STRING 1024
class XOR
{
public:
XOR();
~XOR();
static BOOL XOREncode(BYTE *o_pbyEncoded, BYTE *i_pbySource, int i_nSourceSize, char *i_szKeyString);
static BOOL XOREncode(BYTE *o_pbyEncoded, char *i_szSource, char *i_szKeyString);
static BOOL XORBinary2String(TCHAR *o_szEncodedString, BYTE *i_byBinaryData, int i_nDataSize);
static BOOL XORString2Binary(BYTE *o_byBinaryData, char *o_szEncodedString);
static BOOL XORDecrypt(char *o_pszOutputString, char *i_pszInputString, char *i_pKeyString);
private:
};
[Source]
Code:
#include "stdafx.h"
#include "XOR_Lib.h"
XOR::XOR()
{
}
XOR::~XOR()
{
}
BOOL XOR::XOREncode(BYTE *o_pbyEncoded, BYTE *i_pbySource, int i_nSourceSize, char *i_szKeyString)
{
if(0 >= i_nSourceSize)
{
return FALSE;
}
int nKeyLen = strlen(i_szKeyString);
if(SIZE_MAX_XOR_KEY_STRING < nKeyLen)
{
return FALSE;
}
int nROffset = 0;
int nWOffset = 0;
int nKeyOffset = 0;
if(4 > nKeyLen)
{
for(int i=0; i < i_nSourceSize; i++)
{
o_pbyEncoded[nWOffset] = i_pbySource[nROffset] ^ i_szKeyString[nKeyOffset];
nWOffset++;
nROffset++;
nKeyOffset = (nKeyOffset+1)%nKeyLen;
}
}
else
{
int nEndOffset;
nEndOffset = i_nSourceSize - i_nSourceSize%4;
nKeyLen = nKeyLen - nKeyLen%4;
while(nROffset < nEndOffset)
{
*(DWORD*)(o_pbyEncoded+nWOffset) = *(DWORD*)(i_pbySource+nROffset) ^ *(DWORD*)(i_szKeyString+nKeyOffset);
nWOffset += 4;
nROffset += 4;
nKeyOffset = (nKeyOffset + 4) % nKeyLen;
}
for(int i=0; i < i_nSourceSize - nEndOffset; i++)
{
o_pbyEncoded[nWOffset] = i_pbySource[nROffset] ^ i_szKeyString[nKeyOffset];
nWOffset++;
nROffset++;
nKeyOffset = (nKeyOffset+1) % nKeyLen;
}
}
return TRUE;
}
BOOL XOR::XOREncode(BYTE *o_pbyEncoded, char *i_szSource, char *i_szKeyString)
{
return XOR::XOREncode(o_pbyEncoded, (BYTE*)i_szSource, strlen(i_szSource), i_szKeyString);
}
BOOL XOR::XORBinary2String(TCHAR *o_szEncodedString, BYTE *i_byBinaryData, int i_nDataSize)
{
if(SIZE_MAX_XOR_DATA_TO_STRING < i_nDataSize)
{
return FALSE;
}
memset(o_szEncodedString, 0x00, 2*i_nDataSize); // 2007-10-24 by cmkwon, Output ąöĆŰ ĂʱâČ
for(int i=0; i < i_nDataSize; i++)
{
TCHAR szTemp[512];
wsprintf(szTemp, L"%02X", i_byBinaryData[i]);
_tcsncpy_s(o_szEncodedString, 1024, szTemp, 1024);
}
return TRUE;
}
BOOL XOR::XORString2Binary(BYTE *o_byBinaryData, char *o_szEncodedString)
{
int nStringLen = strlen(o_szEncodedString);
if(SIZE_MAX_XOR_DATA_TO_STRING < nStringLen)
{
return FALSE;
}
memset(o_byBinaryData, 0x00, nStringLen/2);
for(int i=0; i < nStringLen/2; i++)
{
char szTemp[512];
memset(szTemp, 0x00, 512);
memcpy(szTemp, &o_szEncodedString[i*2], 2);
o_byBinaryData[i] = (BYTE)strtol(szTemp, NULL, 16);
}
return TRUE;
}
BOOL XOR::XORDecrypt(char *o_pszOutputString, char *i_pszInputString, char *i_pKeyString)
{
BYTE byEncodedBinary[1024];
memset(byEncodedBinary, 0x00, 1024);
if(FALSE == XOR::XORString2Binary(byEncodedBinary, i_pszInputString))
{
return FALSE;
}
return XOR::XOREncode((BYTE*)o_pszOutputString, byEncodedBinary, strlen(i_pszInputString)/2, i_pKeyString);
}