package module
v0.4.0 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Jun 2, 2019 License: MIT Imports: 6 Imported by: 0



GoDoc Go Report Card

go get github.com/lukechampine/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.

A 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 jsteg.

A more narrowly-focused command named slink is also included. slink embeds 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 full description.

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 go_LICENSE file.



Package jsteg implements JPEG steganography.



This section is empty.


View Source
var ErrTooSmall = errors.New("image is too small to hold the requested payload")

ErrTooSmall is returned if the image is too small to hold the requested payload.


func Hide

func Hide(w io.Writer, m image.Image, data []byte, o *jpeg.Options) error

Hide writes the Image m to w in JPEG 4:2:0 baseline format with the given options, hiding the bits of data in the LSB of each block. Default parameters are used if a nil *Options is passed.

func Reveal

func Reveal(r io.Reader) ([]byte, error)

Reveal reads a JPEG image from r and returns the accumulated LSBs of each block.


This section is empty.


Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL