Automatic Doc/View File Encryption/Decryption | CodeGuru

Automatic Doc/View File Encryption/Decryption

Environment: VC6 SP5, W2K SP3 Introduction I’ve been using this site for some time now to help me with my projects. I just want to say thank you to the sponsors! This site is a great resource! I’m presently working on a project that needs to save files from a document/view application in an encrypted […]

Written By
CodeGuru Staff
CodeGuru Staff
Sep 27, 2002
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Environment: VC6 SP5, W2K SP3

Introduction

I’ve been using this site for some time now to help me with my projects. I just want to say thank you to the sponsors! This site is a great resource!

I’m presently working on a project that needs to save files from a document/view application in an encrypted format. I didn’t have any tricks in my bag, so I looked around here for some examples, but was unable to find any. (Looks like it’s my turn to contribute.) So I banged out some code, and here is what I came up with.

The project requirements were fairly simple. Here’s what I needed the program to do:

  1. Always encrypt the file during write cycles.
  2. Ability to read in previous unencrypted file versions or encrypted versions automatically without user intervention or conversion programs (backward compatibility).
  3. Relatively quick read and write times. For this I choose the BlowFish algorithm.

Design/Implementation Goals

  1. Provide a mechanism that could be used to trigger different behaviors during the read cycle of the file, such as:
    • Use/Change encryption codecs
    • Use/Change compression/decompression engines
  2. I didn’t want to have to change one or more object serialization methods (which meant to accomplish requirement #2, I’d have to use schema numbers, and that can get way too messy/confusing), so as a result, it must work in a generic fashion for the document file that could accomplish requirement #2 easily.

The implementation is a CDocument derivative called CDocumentBlowFish; it uses a CFile derivative called CFileBlowFish.

I only partially implemented Design goal #1, in that during the read cycle of a file, it automatically determines whether the file was previously encrypted. So the goal of “Use/Change encryptions codecs” was met. However, I have not yet taken the time to accomplish the goal of “Use/Change compression/decompression engines.”

Warning: This code should be considered 0.1 Alpha. I’ve done some very light testing, but that is all. That being said, I believe the code to be in working order. YMMV!

Advertisement

How to Use the Program

  1. Drop the following files into your project directory, and then add them to the IDE project:
    • blowfish.cpp
    • blowfish.h
    • blowfish.h2
    • DocumentBlowFish.cpp
    • DocumentBlowFish.h
    • FileBlowFish.cpp
    • FileBlowFish.h
  2. Replace all occurences of the CDocument base class in your doc/view document class .h and .cpp files with CDocumentBlowFish.
  3. Add an #include "DocumentBlowFish.h" to your doc/view document class .h file.
  4. Change the encryption seed in CFileBlowFish::MemberInit() to be unique to your project.
  5. Compile and test. (Make sure that you keep backup copies of your original document files!)

Comments, suggestions, bug fixes, flames (for coding style), and so forth should be posted here. Please do not send me e-mail asking questions or for help; I get way too much spam as it is…

Cheers.
Neal Horman

Downloads

Download demo exe – 17 Kb
Download demo project – 52 Kb
Download source – 18 Kb

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.