Click here to Skip to main content
15,867,568 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 278.8K   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

 
Questionnice project to study Blowfish Pin
Member 879424217-Jun-12 5:41
Member 879424217-Jun-12 5:41 
QuestionHash algorithm Pin
univmalik4-Apr-12 6:49
univmalik4-Apr-12 6:49 
GeneralBug Pin
MeriInssi14-Nov-10 5:10
MeriInssi14-Nov-10 5:10 
GeneralRe: Bug Pin
Nir Dremer15-Nov-10 5:13
Nir Dremer15-Nov-10 5:13 
GeneralMy vote of 1 Pin
mathgeek543-Apr-09 8:37
mathgeek543-Apr-09 8:37 
QuestionAES Encryption Pin
Prasadaknair21-Sep-08 19:31
Prasadaknair21-Sep-08 19:31 
AnswerRe: AES Encryption Pin
Nir Dremer21-Sep-08 21:19
Nir Dremer21-Sep-08 21:19 
GeneralRe: AES Encryption Pin
Prasadaknair23-Sep-08 23:00
Prasadaknair23-Sep-08 23:00 
GeneralRe: AES Encryption Pin
Nir Dremer24-Sep-08 21:22
Nir Dremer24-Sep-08 21:22 
GeneralRe: AES Encryption Pin
Prasadaknair26-Sep-08 1:13
Prasadaknair26-Sep-08 1:13 
GeneralRe: AES Encryption Pin
Nir Dremer26-Sep-08 8:40
Nir Dremer26-Sep-08 8:40 
GeneralProgress bar incorrect Pin
damir_tk26-Nov-06 10:14
damir_tk26-Nov-06 10:14 
GeneralRe: Progress bar incorrect Pin
Nir Dremer26-Nov-06 11:11
Nir Dremer26-Nov-06 11:11 
GeneralRe: Progress bar incorrect Pin
damir_tk26-Nov-06 11:28
damir_tk26-Nov-06 11:28 
Generalwiping is not that secure Pin
Billiebub14-Nov-06 9:58
Billiebub14-Nov-06 9:58 
GeneralRe: wiping is not that secure Pin
Nir Dremer22-Nov-06 6:16
Nir Dremer22-Nov-06 6:16 
GeneralNeed an idea Pin
sudha_sen19-Oct-06 19:05
sudha_sen19-Oct-06 19:05 
GeneralRe: Nice one :) Pin
Nir Dremer24-Mar-06 4:43
Nir Dremer24-Mar-06 4:43 
Questionfile folder security Pin
Member 225874315-Oct-05 22:15
Member 225874315-Oct-05 22:15 
Generalwant DLL Pin
bhavik.dpr13-Oct-05 3:24
bhavik.dpr13-Oct-05 3:24 
GeneralRe: want DLL Pin
Nir Dremer13-Oct-05 3:34
Nir Dremer13-Oct-05 3:34 
GeneralRe: want DLL Pin
bhavik.dpr13-Oct-05 18:32
bhavik.dpr13-Oct-05 18:32 
GeneralRe: want DLL Pin
Nir Dremer13-Oct-05 19:14
Nir Dremer13-Oct-05 19:14 
GeneralRe: want DLL Pin
bhavik.dpr13-Oct-05 19:22
bhavik.dpr13-Oct-05 19:22 
GeneralRe: want DLL Pin
Nir Dremer13-Oct-05 21:16
Nir Dremer13-Oct-05 21:16 

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.