forked from LosaDev/ls-2019-source
LosaDev source snapshot 2019
This commit is contained in:
commit
c198676e97
20588 files changed
+8812878
No files matched your search
@@ -0,0 +1,183 @@
|
||||
#include "stdafx.h"
|
||||
#include "cEncrypt.h"
|
||||
|
||||
// cEncrypt
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Construction/Destruction
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
cEncrypt::cEncrypt() : m_arrayLen(4028)
|
||||
{
|
||||
m_arrayBuffer = new uint8[m_arrayLen];
|
||||
}
|
||||
|
||||
cEncrypt::~cEncrypt()
|
||||
{
|
||||
if(m_arrayBuffer)
|
||||
{
|
||||
delete []m_arrayBuffer;
|
||||
m_arrayBuffer = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
uint32 cEncrypt::Compress(const uint8 *source, uint32 sourceLen, uint8 *destination)
|
||||
{
|
||||
uint32 index = 0;
|
||||
uint32 zeroCount = 0;
|
||||
uint32 zeroBit = 0;
|
||||
uint32 bitArrayCount = 0;
|
||||
uint32 usedBytes = 0;
|
||||
uint8 bit = 0;
|
||||
|
||||
ZeroMemory(m_arrayBuffer, m_arrayLen);
|
||||
|
||||
for(uint32 i = 0; i < sourceLen; ++i)
|
||||
{
|
||||
if(0 == source[i])
|
||||
{
|
||||
++zeroCount;
|
||||
zeroBit = i % 8;
|
||||
bitArrayCount = i >> 3;
|
||||
bit = 1;
|
||||
bit = bit << zeroBit;
|
||||
|
||||
m_arrayBuffer[bitArrayCount] = m_arrayBuffer[bitArrayCount] | bit;
|
||||
if(usedBytes < bitArrayCount) usedBytes = bitArrayCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 1바이트씩 복사
|
||||
destination[index++] = source[i];
|
||||
}
|
||||
}
|
||||
|
||||
if(zeroCount > 0) ++usedBytes;
|
||||
|
||||
memmove(destination+sizeof(uint16)+usedBytes, destination, sourceLen-zeroCount);
|
||||
CopyMemory(destination, &usedBytes, sizeof(uint16)); // + 널값정보에 이용되는 버퍼 길이 2Byte
|
||||
CopyMemory(destination+sizeof(uint16), m_arrayBuffer, usedBytes);
|
||||
|
||||
return (sizeof(uint16) + usedBytes + sourceLen - zeroCount);
|
||||
}
|
||||
|
||||
uint32 cEncrypt::Decompress(const uint8 *source, uint32 sourceLen, uint8 *destination)
|
||||
{
|
||||
uint16 bitArrayCount = 0;
|
||||
uint32 originalLen = 0;
|
||||
uint32 bufferCount = 0;
|
||||
charBit *tempByte;
|
||||
|
||||
CopyMemory(&bitArrayCount, source, sizeof(unsigned short));
|
||||
originalLen = sourceLen-sizeof(uint16);
|
||||
bufferCount = originalLen = originalLen - bitArrayCount;
|
||||
|
||||
ZeroMemory(m_arrayBuffer, m_arrayLen);
|
||||
CopyMemory(m_arrayBuffer, source+sizeof(uint16), bitArrayCount);
|
||||
|
||||
const uint8* lpData = (source + sizeof(uint16) + bitArrayCount);
|
||||
|
||||
uint32 indexSrc = 0, indexDst = 0;
|
||||
for(uint32 i=0; i < bitArrayCount; ++i)
|
||||
{
|
||||
tempByte = reinterpret_cast<charBit*>(&m_arrayBuffer[i]);
|
||||
|
||||
if(tempByte->v1==0)
|
||||
{
|
||||
if(indexSrc < bufferCount)
|
||||
destination[indexDst++] = lpData[indexSrc++];
|
||||
}
|
||||
else
|
||||
{
|
||||
destination[indexDst++] = 0;
|
||||
++originalLen;
|
||||
}
|
||||
|
||||
if(tempByte->v2==0)
|
||||
{
|
||||
if(indexSrc < bufferCount)
|
||||
destination[indexDst++] = lpData[indexSrc++];
|
||||
}
|
||||
else
|
||||
{
|
||||
destination[indexDst++] = 0;
|
||||
++originalLen;
|
||||
}
|
||||
|
||||
if(tempByte->v3==0)
|
||||
{
|
||||
if(indexSrc < bufferCount)
|
||||
destination[indexDst++] = lpData[indexSrc++];
|
||||
}
|
||||
else
|
||||
{
|
||||
destination[indexDst++] = 0;
|
||||
++originalLen;
|
||||
}
|
||||
|
||||
if(tempByte->v4==0)
|
||||
{
|
||||
if(indexSrc < bufferCount)
|
||||
destination[indexDst++] = lpData[indexSrc++];
|
||||
}
|
||||
else
|
||||
{
|
||||
destination[indexDst++] = 0;
|
||||
++originalLen;
|
||||
}
|
||||
|
||||
if(tempByte->v5==0)
|
||||
{
|
||||
if(indexSrc < bufferCount)
|
||||
destination[indexDst++] = lpData[indexSrc++];
|
||||
}
|
||||
else
|
||||
{
|
||||
destination[indexDst++] = 0;
|
||||
++originalLen;
|
||||
}
|
||||
|
||||
if(tempByte->v6==0)
|
||||
{
|
||||
if(indexSrc < bufferCount)
|
||||
destination[indexDst++] = lpData[indexSrc++];
|
||||
}
|
||||
else
|
||||
{
|
||||
destination[indexDst++] = 0;
|
||||
++originalLen;
|
||||
}
|
||||
|
||||
if(tempByte->v7==0)
|
||||
{
|
||||
if(indexSrc < bufferCount)
|
||||
destination[indexDst++] = lpData[indexSrc++];
|
||||
}
|
||||
else
|
||||
{
|
||||
destination[indexDst++] = 0;
|
||||
++originalLen;
|
||||
}
|
||||
|
||||
if(tempByte->v8==0)
|
||||
{
|
||||
if(indexSrc < bufferCount)
|
||||
destination[indexDst++] = lpData[indexSrc++];
|
||||
}
|
||||
else
|
||||
{
|
||||
destination[indexDst++] = 0;
|
||||
++originalLen;
|
||||
}
|
||||
}
|
||||
|
||||
// 아직 데이타가 남아있으면 넣어준다
|
||||
// (m_arrayBuffer 처리 이후에도 값이 남아있는경우는 (byte단위로)NULL값 없이 연속으로 데이터가 있는경우이다)
|
||||
for( ; indexSrc < bufferCount;)
|
||||
{
|
||||
destination[indexDst++] = lpData[indexSrc++];
|
||||
}
|
||||
|
||||
return originalLen;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user