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
https://api.travis-ci.org/cedricbonhomme/Stegano.svg?branch=master

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