#include <fstream>
#include <iostream>
#include <QuickCrypt.h>
using namespace std;
using namespace QuickCrypt;
// performs DES-EDE3 file encryption/decryption in CFB mode
bool EncryptDecryptFile( const char* filenamefrom, const char* filenameto, SL_CIPHER_DIR dir, const unsigned char* iv, const unsigned char* key )
{
//dir: SLC_ENCRYPT - perform encryption
// SLC_DECRYPT - perform decryption
//Open files
fstream filefrom( filenamefrom, ios::in | ios::binary );
if( !filefrom )
{
cout << "\nCould not open file: " << filenamefrom;
return false;
}
fstream fileto( filenameto, ios::out | ios::binary );
if( !fileto )
{
cout << "\nCould not open file: " << filenameto;
return false;
}
//Instantiate CCFBMode object
CCFBMode<CDES_EDE3> cipher( dir, iv, key );
//Encrypt/Decrypt file
const unsigned int BUFF_SIZE = 1024;
unsigned char buff[ BUFF_SIZE ];
while( !filefrom.eof() )
{
filefrom.read( ( char* )buff, BUFF_SIZE );
unsigned int buffsize = filefrom.gcount();
cipher.Process( buff, buff, buffsize ); //in-place encryption/decryption
fileto.write( ( char* )buff, buffsize );
}
return true;
}
int main()
{
char buff[10];
char filename[256]; //Initial file
char filenameencr[256]; //Encrypted file
char filenamedecr[256]; //Decrypted file
//Define key & iv
char key[CDES_EDE3::DEFAULTKEYSIZE] =
{
's', 'e', 'c', 'r', 'e', 't', 'l', 'y',
'9', '6', '7', '1', '2', '9', '2', '7',
'0', '1', '2', '2', '0', '0', '5', '7'
};
unsigned char iv[CDES_EDE3::BLOCKSIZE] =
{
0x41, 0x3E, 0xF0, 0xA1, 0xC6, 0x11, 0xE5, 0x50
};
do
{
//Get file to encrypt (Initial file)
cout << "Enter the full name of the file to encrypt:\n";
cin.getline( filename, 256 );
//Get file to store the result of encryption (Encrypted file)
cout << "Enter the full name of the file to store the result of encryption:\n";
cin.getline( filenameencr, 256 );
//Encrypt file
if( EncryptDecryptFile( filename, filenameencr, SLC_ENCRYPT, iv, (const unsigned char*)key ) )
{
//Get file to store the result of decryption (Decrypted file)
cout << "Enter the full name of the file to store the result of decryption:\n";
cin.getline( filenamedecr, 256 );
//Decrypt file
EncryptDecryptFile( filenameencr, filenamedecr, SLC_DECRYPT, iv, (const unsigned char*)key );
//At this point compare Initial file with Decrypted file. They must be identical.
}
//Continue?
cout << "\nContinue (Y/N)?";
cin.getline( buff, 10 );
} while( *buff == 'Y' || *buff == 'y' );
return 0;
}
|