go get lukechampine.com/jsteg
jsteg is a package for hiding data inside jpeg files, a technique known as
steganography. This is accomplished
by copying each bit of the data into the least-significant bits of the image.
The amount of data that can be hidden depends on the filesize of the jpeg; it
takes about 10-14 bytes of jpeg to store each byte of the hidden data.
// open an existing jpeg f, _ := os.Open(filename) img, _ := jpeg.Decode(f) // add hidden data to it out, _ := os.Create(outfilename) data := byte("my secret data") jsteg.Hide(out, img, data, nil) // read hidden data: hidden, _ := jsteg.Reveal(out)
Note that the data is not demarcated in any way; the caller is responsible for
determining which bytes of
hidden it cares about. The easiest way to do this
is to prepend the data with its length.
jsteg command is included, providing a simple wrapper around the
functions of this package. It can hide and reveal data in jpeg files and
supports input/output redirection. It automatically handles length prefixes
and uses a magic header to identify jpegs that were produced by
A more narrowly-focused command named
slink is also included.
a public key in a jpeg, and makes it easy to sign data and verify signatures
using keypairs derived from password strings. See cmd/slink for a
Binaries for both commands can be found here.
This package reuses a significant amount of code from the image/jpeg package.
The BSD-style license that governs the use of that code can be found in the