A cross-platform command line tool for steganography focused on performance and simplicity.
In short, the art of hiding information in something (like a book, a image, a audio or even a video).
You can find more information on my slides or checkout my talk on the rust meetup munich in june, 2020.
To install the stegano cli, you just need to run
sh
❯ cargo install --force stegano-cli
(--force just makes it update to the latest stegano-cli
if it's already installed)
Note the binary is called stegano
(without -cli
)
to verify if the installation went thru, you can run which stegano
that should output similar to
sh
$HOME/.cargo/bin/stegano
stegano
can be installed from available AUR packages using an AUR helper. For example,
sh
❯ yay -S stegano
```sh ❯ stegano --help Stegano CLI 0.4.0 Sven Assmann sven.assmann.it@gmail.com Hiding secret data with steganography in PNG images and WAV audio files
USAGE: stegano [SUBCOMMAND]
FLAGS: -h, --help Prints help information -V, --version Prints version information
SUBCOMMANDS: help Prints this message or the help of the given subcommand(s) hide Hides data in PNG images and WAV audio files unveil Unveils data from PNG images unveil-raw Unveils raw data in PNG images ```
```sh ❯ stegano hide --help stegano-hide Hides data in PNG images and WAV audio files
USAGE:
stegano hide [FLAGS] [OPTIONS] --data --in
FLAGS: --x-force-content-version-2 Experimental: enforce content version 2 encoding (for backwards compatibility) -h, --help Prints help information -V, --version Prints version information
OPTIONS:
-d, --data File(s) to hide in the image
-i, --in
Let's illustrate how to hide a file like README.md
, inside an image Base.png
and save it as README.png
:
sh
❯ stegano hide --data README.md --in resources/plain/carrier-iamge.png --out README.png
The final result is then contained in the image README.png
.
Pro TIP you can hide multiple files at once
here I'm using the shorthand parameters (--data, -d), (--in, -i), (--out, -o)
sh
❯ stegano hide \
-i resources/plain/carrier-image.png \
-d resources/secrets/Blah.txt \
resources/secrets/Blah-2.txt \
-o secret.png
Hidden Feature you can use a .jpg
for input and save it as .png
sh
❯ stegano hide \
-i resources/NoSecret.jpg \
-d resources/secrets/Blah.txt \
-o secret.png
sh
❯ stegano hide \
-i resources/plain/carrier-audio.wav \
-d resources/secrets/Blah.txt \
resources/secrets/Blah-2.txt \
-o secret.wav
Now let's assume we want to hide just a little text message in secret-text.png
. So we would run:
sh
❯ stegano hide \
-i resources/NoSecrets.jpg \
-m 'This is a super secret message' \
-o secret-text.png
```sh ❯ stegano unveil --help stegano-unveil Unveils data from PNG images
USAGE:
stegano unveil --in
FLAGS: -h, --help Prints help information -V, --version Prints version information
OPTIONS:
-i, --in
Let's unveil the README.md
that we've hidden (just above) in README.png
```sh ❯ stegano unveil --in README.png --out ./
❯ file README.md README.md: UTF-8 Unicode text ```
Now let's unveil the message from above secret-text.png
. So we would run:
```sh ❯ stegano unveil \ -i secret-text.png \ -o message
❯ cat message/secret-message.txt This is a super secret message ```
```sh ❯ stegano unveil-raw --help stegano-unveil-raw Unveils raw data in PNG images
USAGE:
stegano unveil-raw --in
FLAGS: -h, --help Prints help information -V, --version Prints version information
OPTIONS:
-i, --in
Let's unveil the raw data of the README.md
that we've hidden just above in README.png
sh
❯ stegano unveil-raw --in README.png --out README.bin
The file README.bin
contains all raw binary data unfiltered decoded by the LSB decoding algorithm.
That is for the curious people, and not so much interesting for regular usage.
To contribute to stegano-rs you can either checkout existing issues labeled with good first issue
or open a new issue
and describe your problem.
Also every PR is welcome, just as a note of caution: at this very time the architecture and the API are still in flux and might change, so in any case I recommend opening an issue first to discuss a code contribution.