This program encodes text in a bitmap image (.bmp). It works by using LSB steganography which is the process of modifying the least significant bit of a pixel to store part of a character.
The default values for kHeaderSize, kFooterSize and kMaxSecretLen are 1024. This can be changed with minimal impact on the program
-
kHeaderSize The minimum value that I would recommend setting this to would be 256. After a quick look on Wikipedia, it looks like anywhere between 16 and 196 bytes are required for the header. Setting it at 256 or higher seems safe.
-
kFooterSize It doesn't look like a bitmap has a footer. This was included for .jpg images. Play around with it if you would like but there is certainly no harm in leaving it at the default value
-
kMaxSecretLen This was included to stop the python version crashing. Though it has the added benefit of outputting a reasonable amount of text to the screen. Using larger values will decrease the speed of the program, and increase the amount of text outputted but shouldn't have an adverse effect
-
kCleanImageName I've done an MD5 hash of "CLEAN" and appended it to the filename to reduce the chance of overwriting an important file
Read image file in
FILE* ReadImg(std::string image_name)
Write image file
FILE* WriteImg(std::string image_name)
Get the size of the image in bytes to prevent overwriting footer
int GetSize(std::string image_name)
Replace the least significant bit with a 0
int WriteCleanImg(std::string input_image_name, std::string output_image_name)
Write a secret message to the image
int WriteEncodedImg(std::string input_image_name, std::string output_image_name,
std::string secret_msg)
Read the encoded image
int ReadEncodedImg(std::string input_image_name)
The CLI
int Cli()
"Clean, Encode, Clean and Encode (.bmp only), Decode or Quit? (C, e, a, d, q)"
- Entering 'c' will clean an image (specified by its path)
- Entering 'e' will encode an image (specified by its path)
- Entering 'a' will clean and encode an image (specified by its path)
- Entering 'd' will decode an image (specified by its path)
- Entering 'q' will quit the program
"Type the name of the input image (include the file extension and path if required)"
- Enter the path to an input image
"Type the name of the output image (include the file extension and path if required)"
- If the user selected Clean, Encode, or Clean and Encode. Enter the path of an output image
"Type the secret message (max kMaxSecretLen characters)"
- If the user selected Encode, or Clean and Encode. Enter a message for the program to encode in the image
This program is written in C++ using Visual Studio Community Edition 2017 on Windows 10. To install this IDE, go to https://visualstudio.microsoft.com/
- Download or clone this GitHub repository
- (If downloaded) Extract the zip archive
- Open the project by going to File> Open> Project/Solution
- Run the program by pressing the green play button or with F5
- Download or clone this GitHub repository
- (If downloaded) Extract the zip archive
- Go to bin> Debug
- Double click the .exe file (note that windows will ask if you want to run the file – only run executables that you trust)
- Press the Clone or download button in the top right
- Copy the URL (link)
- Open the command line and change directory to where you wish to clone to
- Type 'git clone' followed by URL in step 2
$ git clone https://github.com/FredHappyface/CPP.ImageEncoder
More information can be found at https://help.github.com/en/articles/cloning-a-repository
- Press the Clone or download button in the top right
- Click open in desktop
- Choose the path for where you want and click Clone
More information can be found at https://help.github.com/en/desktop/contributing-to-projects/cloning-a-repository-from-github-to-github-desktop
- Download this GitHub repository
- Extract the zip archive
- Copy/ move to the desired location
MIT License Copyright (c) FredHappyface (See the LICENSE for more information.)