I've recently discovered the
CArchive class. I've never used it
before. I had to save my application's preferences and I thought I would try to
serialize it to a file using the
CArchive class. Then only problem is
that I need to encrypt the data.
So I sat down and wrote a
CFile derived class to encrypt data while
In the demo project I've used the Rijndael
algorithm. The implementation was written by Szymon Stefanek.
The most important functions of the
CFile class are
Write. Since these are virtual functions, you can override them with your
In the class, there are 2 callback functions. The class uses both to encrypt
and to decrypt the data.
typedef UINT (FileEncryptProc)(const BYTE *pBuffer,UINT dwSize,BYTE *pDestination,DWORD
pBuffer - Pointer to the data
dwSize - Data length in bytes
pDestination - Pointer to a destination buffer
dwParam - User defined parameter
New data length.
You set the callbacks using the
UINT Encrypt(const BYTE *pBufIn, UINT nSize, BYTE *pBufOut,
UINT Decrypt(const BYTE *pBufIn, UINT nSize, BYTE *pBufOut,
f.SetEncryption(&Encrypt, (DWORD)&rijEncrypt, &Decrypt,
In the demo project, I've created two Rijndael objects. One for encryption
and one for decryption. Both objects were initialized using the same key. I've
also created a
CFileEx object and set it's callbacks to my defined
From that point, I can create a
CArchive object and use it as normal
with my file. As you can see in the demo, I am writing and reading various data
types to and from the archive.