Home    | Products    | Downloads    | Purchase    | Support   

 Products

 Paint Express

 PrivyPad

 HashCalc

 FSUM

 QuickCrypt Library

    Download

    Purchase

    Samples

    License Agreement

    Related Links

    F.A.Q.

    Overview

 QuickHash Library

 FastCRC Library

 Company

 About Us

 Contact Us

 Miscellaneous

 Affiliate Program

 Site Map

SlavaSoft QuickCrypt Library Samples
Sample #3 (C++ Interface)  

All

Previous Next


The following sample demonstrates how to use the CBlowfish and CCFBMode classes to perform file encryption/decryption in CFB mode of operation.

#include <fstream>
#include <iostream>
#include <QuickCrypt.h>

using namespace std;
using namespace QuickCrypt;

// performs Blowfish 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<CBlowfish> 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[CBlowfish::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',
       '*', '-', '*', '-', '*', '-', '*', '-',
       '9', '6', '7', '1', '2', '9', '2', '7',
       '0', '1', '2', '2', '0', '0', '5', '7',
       '*', '-', '*', '-', '*', '-', '*', '-'
    };

    unsigned char iv[CBlowfish::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;
}
 
  Copyright © SlavaSoft Inc. All rights reserved.