Files
Sun1602/Server/include/SimpleModulus.h
T
2022-10-26 12:25:11 +08:00

84 lines
2.5 KiB
C++

// SimpleModulus.h: interface for the CSimpleModulus class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SIMPLEMODULUS_H__5EC20CDC_CA87_4F9D_927B_24C8DD11ECB7__INCLUDED_)
#define AFX_SIMPLEMODULUS_H__5EC20CDC_CA87_4F9D_927B_24C8DD11ECB7__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/*# define SIZE_ENCRYPTION_BLOCK ( 32)
# define SIZE_ENCRYPTION_KEY ( 16)
# define SIZE_ENCRYPTED_BLOCK ( 38)*/
# define SIZE_ENCRYPTION_BLOCK ( 8)
# define SIZE_ENCRYPTION_KEY ( 4) // SIZE_ENCRYPTION_BLOCK 의 절반
# define SIZE_ENCRYPTED_BLOCK ( 11)
class CSimpleModulus
{
public:
CSimpleModulus();
virtual ~CSimpleModulus();
void Init( void);
protected:
DWORD m_dwModulus[SIZE_ENCRYPTION_KEY];
DWORD m_dwEncryptionKey[SIZE_ENCRYPTION_KEY];
DWORD m_dwDecryptionKey[SIZE_ENCRYPTION_KEY];
DWORD m_dwXORKey[SIZE_ENCRYPTION_KEY];
static DWORD s_dwSaveLoadXOR[SIZE_ENCRYPTION_KEY];
//////////////////////////////////////////////////////////////////////////
// 암호화/복호화 ->
// 암호화
public:
int Encrypt( void *lpTarget, void *lpSource, int iSize); // 큰 사이즈 모두, lpTarget 이 NULL이면 필요량 리턴
int Decrypt( void *lpTarget, void *lpSource, int iSize); // 큰 사이즈 모두, lpTarget 이 NULL이면 필요량 리턴
protected:
void EncryptBlock( void *lpTarget, void *lpSource, int nSize); // 32 byte 를 38 byte 로
int DecryptBlock( void *lpTarget, void *lpSource); // 38 byte 를 32 byte 로, Size를 리턴함
int AddBits( void *lpBuffer, int nNumBufferBits, void *lpBits, int nInitialBit, int nNumBits);
void Shift( void *lpBuffer, int nByte, int nShift);
int GetByteOfBit( int nBit);
// <- 암호화/복호화
//////////////////////////////////////////////////////////////////////////
// 저장/읽기
public:
BOOL SaveAllKey( char *lpszFileName);
BOOL LoadAllKey( char *lpszFileName);
BOOL SaveEncryptionKey( char *lpszFileName);
BOOL LoadEncryptionKey( char *lpszFileName);
BOOL SaveDecryptionKey( char *lpszFileName);
BOOL LoadDecryptionKey( char *lpszFileName);
protected:
BOOL SaveKey( char *lpszFileName, unsigned short sID, BOOL bMod, BOOL bEnc, BOOL bDec, BOOL bXOR);
BOOL LoadKey( char *lpszFileName, unsigned short sID, BOOL bMod, BOOL bEnc, BOOL bDec, BOOL bXOR);
};
#pragma pack ( 1)
typedef struct
{
unsigned short m_sID;
unsigned int m_iSize;
} ChunkHeader;
#pragma pack ()
# define CHUNKID_ALLKEY ( 0x1111)
# define CHUNKID_ONEKEY ( 0x1112)
#endif // !defined(AFX_SIMPLEMODULUS_H__5EC20CDC_CA87_4F9D_927B_24C8DD11ECB7__INCLUDED_)