Click here to Skip to main content
15,881,803 members
Articles / Desktop Programming / ATL
Article

File Encryption Utility

Rate me:
Please Sign up or sign in to vote.
4.70/5 (21 votes)
22 Sep 2002GPL33 min read 279.6K   13.4K   90   81
File Encryption Utility based on Blowfish Encryption Algorithm.

Sample Image - FileEncryption.jpg

Introduction<o:p>

After a long search for a simple and secure file encryption utility, that is simple and intuitive to use I've decided to write something of my own.<o:p>

File Encryption utility is a simple tool for encrypting both text and binary files using the blowfish encryption algorithm.<o:p>

The utility can create a self extracting encrypted file. For a deep view of how to create a self extracted executable check my other article: Creating Self-Extracted Executable .<o:p>

Features<o:p>

File Encryption Utility Has the following features:<o:p>

  • Fast & Quick File Encryption/Decryption.<o:p>
  • Internal File Wiping Utility.<o:p>
  • Creating Self-Extracting Encrypted File.<o:p>
  • Explorer Integration (through Configuration Dialog).<o:p>
  • Command Line Parameters.<o:p>

Language<o:p>

The File Encryption utility is writen in native C++ using ATL only for windowing classing.<o:p>

The usage of ATL is minimal so anyone who is not familiar with the library should be able to understand the code as well.<o:p>

Overview<o:p>

File Encryption Utility is divided to few small projects:<o:p>

  • FileEnc – The UI of the file encryption utility, also containing the Processing class which is also used by SelfExtract and it is responsible for reading/writing files.<o:p>
  • Enc_Blowfish – Blowfish encryption implementation (based upon Bruce Schneier and Jim Conger implementation).<o:p>
  • SelfExtract – Self Extracting executable "header".<o:p>
  • GenLib – Small Library holding all commonly used items in other project parts.<o:p>
  • Builder – Small Console utility for creating the final File Encryption Executable.<o:p>

GenLib – The General Library<o:p>

In order to save time and to have a central point for all general purpose classes I'm working with a static library called GenLib.<o:p>

A stripped version of the GenLib is available with the File Encryption Utility. In this version you can see the following general purpose classes:<o:p>

  • GenFiles – Openning OpenFile/SaveFile and OpenDirectory Dialog Boxes.<o:p>
  • SelfExtract – Creating Self-Extracting Executable.<o:p>
  • Thread – Implementation of a parent class for classes who want to execute code in separate thread (more information can be seen in the header – thread.h).<o:p>
  • FileWipe – Wiping a File from Hard Drive.<o:p>

All those classes are under the GenLib namespace.<o:p>

Additional Encryptions<o:p>

Inside the FileEnc project there's an interface called EncryptionInterface – implementing this interface can allow you to easily change the encryption the utility uses.<o:p>

Implementing this interface requires only stream cipher implementation and saves all the overhead of working with files.<o:p>

Blowfish implementation is statically linked to the utility in order to avoid hacking by changing the dll. With a few minutes of work the utility can support a number of encryption dlls that can be loaded at runtime based on the users decision.<o:p>

Security<o:p>

In order to make the utility the most secure I can I've tried wiping information from memory when the application closes.<o:p>

When looking at the source, you can see that I've used ZeroMemory API and few others APIs to delete information from memory (like the password used).<o:p>

When encrypting a file you can mark the 'Wipe Source After Process' checkbox and by that insure that the file you're encrypting is not accessible.<o:p>

Remarks<o:p>

Decryption does NOT verify password correctness (information is being encrypted without adding any information about the file). As a result when decrypting with the wrong password you will receive a file with junk inside - this is not a bug.<o:p>

The file encryption is based upon the password length - larger passwords equal better security.<o:p>

Although I believe that the file wiping method is very secure, to be 100% sure you should use a product dedicated to that purpose.<o:p>

Reference<o:p>

Blowfish encryption algorithm - http://www.schneier.com/paper-blowfish-fse.html

Revision History

23 Sep 2002 - Initial Revision

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPLv3)


Written By
Product Manager
Israel Israel
Nir is a Product Manager from Israel with past Software Engineering Experience.

You're welcome to visit his photography site:
http://www.dremer.net/

Comments and Discussions

 
AnswerRe: Licensing &amp; Export? Pin
Nir Dremer28-Apr-04 11:34
Nir Dremer28-Apr-04 11:34 
QuestionHow to make a DLL for this utility Pin
r_samavi23-Apr-04 15:27
r_samavi23-Apr-04 15:27 
AnswerRe: How to make a DLL for this utility Pin
Nir Dremer28-Apr-04 11:38
Nir Dremer28-Apr-04 11:38 
GeneralSelf-Decryptor Pin
Anonymous30-Mar-04 6:26
Anonymous30-Mar-04 6:26 
GeneralRe: Self-Decryptor Pin
Nir Dremer30-Mar-04 8:08
Nir Dremer30-Mar-04 8:08 
Generalblowfish encryption structure Pin
Rob Brasier26-Dec-03 14:43
Rob Brasier26-Dec-03 14:43 
GeneralRe: blowfish encryption structure Pin
Nir Dremer27-Dec-03 8:55
Nir Dremer27-Dec-03 8:55 
GeneralUse of ZeroMemory Pin
Steve Hopkins10-Sep-03 23:35
Steve Hopkins10-Sep-03 23:35 
GeneralBug Pin
xwcvb23-Aug-03 23:03
xwcvb23-Aug-03 23:03 
GeneralRe: Bug Pin
Nir Dremer24-Aug-03 3:41
Nir Dremer24-Aug-03 3:41 
GeneralRe: Bug Pin
Bamaco215-Jan-04 9:57
Bamaco215-Jan-04 9:57 
Generalcomparaison Pin
Fad B24-Mar-03 9:51
Fad B24-Mar-03 9:51 
GeneralRe: comparaison Pin
Nir Dremer25-Mar-03 7:56
Nir Dremer25-Mar-03 7:56 
GeneralVC6 Pin
Jack R13-Dec-02 1:15
Jack R13-Dec-02 1:15 
GeneralRe: VC6 Pin
Nir Dremer13-Dec-02 1:22
Nir Dremer13-Dec-02 1:22 
GeneralRe: VC6 Pin
Yasen Georgiew18-Apr-03 2:46
Yasen Georgiew18-Apr-03 2:46 
GeneralRe: VC6 Pin
Nir Dremer18-Apr-03 3:00
Nir Dremer18-Apr-03 3:00 
GeneralHello... A request... Pin
lighttrainmedia11-Dec-02 5:54
lighttrainmedia11-Dec-02 5:54 
GeneralRe: Hello... A request... Pin
Nir Dremer13-Dec-02 0:02
Nir Dremer13-Dec-02 0:02 
QuestionIs EFS not good enough? Pin
Andreas Saurwein24-Sep-02 23:31
Andreas Saurwein24-Sep-02 23:31 
AnswerRe: Is EFS not good enough? Pin
Nir Dremer25-Sep-02 0:08
Nir Dremer25-Sep-02 0:08 
GeneralRe: Is EFS not good enough? Pin
Andreas Saurwein11-Dec-02 6:10
Andreas Saurwein11-Dec-02 6:10 
GeneralRe: Is EFS not good enough? Pin
Nir Dremer13-Dec-02 0:15
Nir Dremer13-Dec-02 0:15 
GeneralRe: Is EFS not good enough? Pin
Andreas Saurwein13-Dec-02 4:11
Andreas Saurwein13-Dec-02 4:11 
GeneralRe: Is EFS not good enough? Pin
supersuper26-Apr-04 10:27
supersuper26-Apr-04 10:27 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.