Project: Fun With Crypto
Status: On and Off

Description: This is more of a hobby then a project. A collection of small programs I have written for fun which explore some aspects of Cryptography.

What that means is I wrote them in a matter of hours, so the source is not exactly the cleanest thing in the world. But it's just for fun, and they do work.

Steganography: The art of hidden writing.

This project was inspired by the movie "Along came a spider". In the movie they talked about the kids passing messages to each other in class that were hidden in digital images.

While I don't know if children of that age could accomplish this, it turns out this is actually relatively simple.

This program will take a Bitmap and encode ASCII text from a text file into the image data. Then you can pass the innocuous looking image to some one who can then run the program on it again to extract the message.

Here is a the product compiled for Win32, and of course, source included:

XOR Encryption: While trivial to implement, XOR Encryption can range from laughably easy to break, to very difficult. It all depends on the key length.

If you were to use an 8 bit key to encrypt an ASCII file (each ASCII character is 8 bits), then the encrypted result would be vulnerable to frequency analysis.

But if a key of sufficient length (best case scenario is a key of the length of the data to be encrypted) is used, it is essentially a one-time pad which there is no efficient method of breaking.

Here is a the product compiled for Win32, source included:

Distributed Planar Key Encryption:

The idea for this encryption scheme came (as many ideas of mine do) from the movies. You've seen those movies where a super important vault, or missile launch system, or whatever has multiple key holes, and both keys must be inserted at the same time to be able to unlock it? It prevents any single person from misusing their key, as multiple people are required to agree on accessing it.

How it works:
Several Child Keys will be generated at encryption time. These keys, Child Keys, will combine to form the single unique Parent Key which is the actual encryption key. That of course will be used to encrypt the data.

Here, 2D Planes which exist in 3D space are used as the child keys. Three of these planes intersect at a unique point in space, and that point is the parent key.

Here is a the product compiled for Win32, source included:


Language: C++