A python steganography module to store messages or files protected with AES-256 encryption inside an image.
Project description
A Python steganography module to store messages or files protected with AES-256 encryption inside an image.
Steganography is the art of concealing information within different types of media objects such as images or audio files, in such a way that no one, apart from the sender and intended recipient, suspects the existence of the message.
By default, steganography is a type of security through obscurity.
Additionally, this module also enhances the security of the steganography through data encryption. The data concealed is encrypted using AES-256 encryption, a popular algorithm used in symmetric key cryptography.
Prerequisites
Python 3+ pip3 (Most Linux systems come with Python 3 installed by default).
Dependencies Installation (Ubuntu)
$ sudo apt-get install python3-pip
Dependencies Installation (MacOS)
To install Python3, I recommend using the Homebrew package manager. The script will explain what changes it will make and prompt you before the installation begins.
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Edit your ~/.profile to include (if it is not already there):
export PATH=/usr/local/bin:/usr/local/sbin:$PATH
To install Python 3:
$ brew install python3
Installation
To install the package, just run:
$ pip3 install cryptosteganography
Usage
Use as a library in a Python program
Store a message string inside an image
from cryptosteganography import CryptoSteganography
crypto_steganography = CryptoSteganography('My secret password key')
# Save the encrypted file inside the image
crypto_steganography.hide('input_image_name.jpg', 'output_image_file.png', 'My secret message')
secret = crypto_steganography.retrieve('output_image_file.png')
print(secret) # My secret message
Store a binary file inside an image
Note: This only works if the concealed file size is smaller than the input image.
from cryptosteganography import CryptoSteganography
message = None
with open('sample.mp3', "rb") as f:
message = f.read()
crypto_steganography = CryptoSteganography('My secret password key')
# Save the encrypted file inside the image
crypto_steganography.hide('input_image_name.jpg', 'output_image_file.png', message)
# Retrieve the file (the previous crypto_steganography instance could be used but I instantiate a brand new object
# with the same password key just to demonstrate that it can be used to decrypt)
crypto_steganography = CryptoSteganography('My secret password key')
decrypted_bin = crypto_steganography.retrieve('output_image_file.png')
# Save the data to a new file
with open('decrypted_sample.mp3', 'wb') as f:
f.write(secret_bin)
Use as a Python program
Check help at the command line prompt to learn how to use it.
$ cryptosteganography -h
usage: cryptosteganography [-h] {save,retrieve} ...
A python steganography script that save/retrieve a text/file (AES 256 encrypted) inside an image.
positional arguments:
{save,retrieve} sub-command help
save save help
retrieve retrieve help
optional arguments:
-h, --help show this help message and exit
Save sub command help
$ cryptosteganography save -h
usage: cryptosteganography save [-h] -i INPUT_IMAGE_FILE (-m MESSAGE | -f MESSAGE_FILE) -o OUTPUT_IMAGE_FILE
optional arguments:
-h, --help show this help message and exit
-i INPUT_IMAGE_FILE, --input INPUT_IMAGE_FILE
Input image file.
-m MESSAGE, --message MESSAGE
Your secret message to hide (non-binary).
-f MESSAGE_FILE, --file MESSAGE_FILE
Your secret to hide (Text or any binary file).
-o OUTPUT_IMAGE_FILE, --output OUTPUT_IMAGE_FILE
Output image containing the secret.
Retrieve sub command help
$ cryptosteganography retrieve -h
usage: cryptosteganography retrieve [-h] -i INPUT_IMAGE_FILE [-o RETRIEVED_FILE]
optional arguments:
-h, --help show this help message and exit
-i INPUT_IMAGE_FILE, --input INPUT_IMAGE_FILE
Input image file.
-o RETRIEVED_FILE, --output RETRIEVED_FILE
Output for the binary secret file (Text or any binary file).
Save message example
$ cryptosteganography save -i 4824157.png -m "My secret message..." -o output.png
Enter the key password:
Output image output.png saved with success
Retrieve message example
$ cryptosteganography retrieve -i output.png
Enter the key password:
My secret message...
Save file example
$ cryptosteganography save -i input_image_name.jpg -f duck_logo.pem -o output_file.png
Enter the key password:
Output image output_file.png saved with success
Retrieve file example
$ cryptosteganography retrieve -i output.png -o decrypted_file
Enter the key password:
decrypted_file saved with success
License
This project is licensed under the MIT License - see the LICENSE file for details.
Limitations
Only works with Python 3.
It does not work if the concealed file is greater than the original input file.
Output image is limited to PNG format only.
I did not test with all concealed file types. Feel free to report any bug you find.
Contributing
For details, check out CONTRIBUTING.md.
Changelog
For details, check out CHANGELOG.md.
Acknowledgments
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file cryptosteganography-0.8.4.tar.gz
.
File metadata
- Download URL: cryptosteganography-0.8.4.tar.gz
- Upload date:
- Size: 10.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 310744a80f4778f82abc902cc855ab422867bfdf59a426bb0a7442aefef31386 |
|
MD5 | 2df6a0b9c3b47a2aba4f1aaa24a8830d |
|
BLAKE2b-256 | ad8515df25eeee7c99b9404748c15f97a0cd490e7f4b9e1db486898bb25e9bca |
File details
Details for the file cryptosteganography-0.8.4-py3-none-any.whl
.
File metadata
- Download URL: cryptosteganography-0.8.4-py3-none-any.whl
- Upload date:
- Size: 8.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bee1fc4e748d96743537750aac3a08266d86a0867d31c98ce7fe189ac4fd0cd9 |
|
MD5 | 9f67d13ad0c11f505c8da892c94873ef |
|
BLAKE2b-256 | 3772918299e1c7cb0030219157a24688b360c5efd9925dfb7702ba0bb99bf806 |