System Documentation


Steve is currently package as a static binary for linux. It should be able to operate on most recent linux distributions without any modifications. It is possible to compile Steve for the windows operating system if you can meet the requirements of the image library we used.

ImageDevil was used to load, save and access the image files. This library has been known to work under many operating systems and is avaliable precompiled for most platforms.

This program is not CPU or memory intensive. You should have enough memory to store a copy of the image in memory for processing, and of course to load the program.


Steve is capable of encoding a 255 character message from a textfile into a supplied bitmap file. The result of this encoding is a new bitmap with the encoded message. Here is an example of the command you would type to add the message from 'secret.txt' to the bitmap 'happykids.bmp':

> ./steve encode happykids.bmp stenograph.bmp secret.txt

The resulting bitmap, 'stenograph.bmp' is a 24-bit bitmap containing the message from 'secret.txt'. To get that message from the image you would type the following command:

> ./steve decode stenograph.bmp message.txt

The contents of the file, 'message.txt' will match the first 255 characters of 'secret.txt'.


As stated before, Steve is only capable of encoding messages with a max length of 255 characters. Steve is also limited to processing bitmap files for technical reasons. There is no check for correct file type being used, nor for saving the correct file type.

How it Works

Steve hides the eight bits that make up an ASCII character in the message in evenly distributed pixels. We up sample all images to use 24bit color, so each channel, blue/green/red have 8bits to represent their color. We put 6 bits of the character into blue and green, 2 bits in to red. We use the lower order bits of each channel to minimize the effect of the color change for the modified pixel.

To actully put the message in the bitmap we first get the length of the message and encode it into the first pixel of the image. Then we step ahead by "pixelsinimage/characters in message". That pixel is then encoded with the corrosponding character and then step ahead again to the next pixel until we finish the message.

Programmers Documenation

Source code for steve is a pair of file, a .c file containing the bulk of the code and a corresponding .h header file containing forward declarations and includes. The main function provides parameter processing and flow control. The encode and decode methods are fairly simular. They both work with a pointer to the image data that was just loaded. The message length is the first thing to be encoded or read from the image. With that length the encoding and decoding continues.

It may be possible to add supprot for TIFF's (they may already be supported), but compressed and pallet using formats are definatly out of the question. It is definatly possible to make the maximum message length larger, but would require breaking the current encoding format.

[ Back ] [ Next ]