A very simple solution:
void Encrypt(LPCTSTR lpszFile, const BYTE *pBuf, unsigned nSize)
{
LPBYTE pEnc = new BYTE[nSize];
memcpy(pEnc, pBuf, nSize);
for (unsigned i = 0; i < nSize; i++)
pEnc[i] ^= 0xAA;
CFile file;
file.Open(lpszFile, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
file.Write(pEnc, nSize);
file.Close();
delete [] pEnc;
}
LPBYTE Decrypt(LPCTSTR lpszFile, unsigned& nSize)
{
CFile file;
file.Open(lpszFile, CFile::modeRead | CFile::typeBinary);
nSize = file.GetLength();
LPBYTE pBuf = new BYTE[nSize];
file.Read(pBuf, nSize);
file.Close();
for (unsigned i = 0; i < nSize; i++)
pBuf[i] ^= 0xAA;
return pBuf;
}
void EncryptFile(LPCTSTR lpszInFile, LPCTSTR lpszOutFile)
{
CFile file;
file.Open(lpszInFile, CFile::modeRead | CFile::typeBinary);
nSize = file.GetLength();
LPBYTE pBuf = new BYTE[nSize];
file.Read(pBuf, nSize);
file.Close();
Encrypt(lpszOutFile, pBuf, nSize);
delete [] pBuf;
}
void DecryptFile(LPCTSTR lpszInFile, LPCTSTR lpszOutFile)
{
unsigned nSize = 0;
LPBYTE pBuf = Decrypt(lpzsInFile, nSize);
CFile file;
file.Open(lpszOutFile, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
file.Write(pBuf, nSize);
file.Close();
delete [] pBuf;
}
You may replace the loop using
XOR
for encryption and decryption by any other method.