Installation¶
$ sudo pip install Stegano
You will be able to use Stéganô in your Python programs or as a command line tool.
If you want to retrieve the source code (with the unit tests):
$ git clone https://github.com/cedricbonhomme/Stegano.git
Using Stéganô as a Python module¶
LSB method¶
Python 3.5.1 (default, Dec 7 2015, 11:33:57)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from stegano import slsb
>>> secret = slsb.hide("./tests/sample-files/Lenna.png", "Hello world!")
>>> secret.save("./Lenna-secret.png")
>>> print(slsb.reveal("./Lenna-secret.png"))
Hello world!
Description field of the image¶
For JPEG and TIFF images.
Python 3.5.1 (default, Dec 7 2015, 11:33:57)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from stegano import exifHeader
>>> secret = exifHeader.hide("./tests/sample-files/20160505T130442.jpg",
"./image.jpg", secret_message="Hello world!")
>>> print(exifHeader.reveal("./image.jpg"))
More examples are available in the tests.
Using Stéganô in command line for your scripts¶
Display help¶
$ slsb --help
Usage: slsb [options]
Options:
--version show program's version number and exit
-h, --help show this help message and exit
--hide Hides a message in an image.
--reveal Reveals the message hided in an image.
-i INPUT_IMAGE_FILE, --input=INPUT_IMAGE_FILE
Input image file.
-o OUTPUT_IMAGE_FILE, --output=OUTPUT_IMAGE_FILE
Output image containing the secret.
-m SECRET_MESSAGE, --secret-message=SECRET_MESSAGE
Your secret message to hide (non binary).
-f SECRET_FILE, --secret-file=SECRET_FILE
Your secret to hide (Text or any binary file).
-b SECRET_BINARY, --binary=SECRET_BINARY
Output for the binary secret (Text or any binary
file).
Hide and reveal a text message with the LSB method¶
$ lsb --hide -i ./tests/sample-files/Lenna.png -o ./Lenna_enc.png -m HelloWorld!
$ lsb --reveal -i ./Lenna_enc.png
HelloWorld!
Hide and reveal a binary file¶
$ wget http://www.gnu.org/music/free-software-song.ogg
$ lsb --hide -i ./tests/sample-files/Montenach.png -o ./Montenach_enc.png -f ./free-software-song.ogg
$ rm free-software-song.ogg
$ lsb --reveal -i ./Montenach_enc.png -b ./song.ogg
Hide and reveal a text message with the LSB method and generated sets¶
Sets are used in order to select the pixels where the message will be hidden.
echo "Hide the message with the Sieve of Eratosthenes..."
lsb-set --hide -i ./tests/sample-files/Montenach.png -o ./surprise.png --generator eratosthenes -m 'Joyeux Noël!'
echo ""
echo "Try to reveal with Mersenne numbers..."
lsb-set --reveal --generator mersenne -i ./surprise.png
echo ""
echo "Try to reveal with fermat numbers..."
lsb-set --reveal --generator fermat -i ./surprise.png
echo ""
echo "Try to reveal with carmichael numbers..."
lsb-set --reveal --generator carmichael -i ./surprise.png
echo ""
echo "Try to reveal with Sieve of Eratosthenes..."
lsb-set --reveal --generator eratosthenes -i ./surprise.png
An other example:
# Hide the message - LSB with a set defined by the identity function (f(x) = x).
lsb-set --hide -i ./tests/sample-files/Montenach.png -o ./enc-identity.png --generator identity -m 'I like steganography.'
# Hide the message - LSB only.
lsb --hide -i ./tests/sample-files/Montenach.png -o ./enc.png -m 'I like steganography.'
# Check if the two generated files are the same.
sha1sum ./enc-identity.png ./enc.png
# The output of lsb is given to lsb-set.
lsb-set --reveal -i ./enc.png --generator identity
# The output of lsb-set is given to lsb.
lsb --reveal -i ./enc-identity.png
Steganalysis¶
# Hide the message with Sieve of Eratosthenes
lsb-set --hide -i ./tests/sample-files/Ginnifer-Goodwin.png -o ./surprise.png --generator eratosthenes -m 'Very important message.'
# Steganalysis of the original photo
steganalysis-parity -i ./tests/sample-files/Ginnifer-Goodwin.png -o ./surprise_st_original.png
# Steganalysis of the secret photo
steganalysis-parity -i ./surprise.png -o ./surprise_st_secret.png
# Reveal with Sieve of Eratosthenes
lsb-set --reveal --generator eratosthenes -i ./surprise.png