Skip to content
JPEG steganography
Go
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmd switch to vanity import path Jun 2, 2019
testdata reorganize package structure Sep 7, 2017
LICENSE add LICENSE and README.md Sep 9, 2017
README.md switch to vanity import path Jun 2, 2019
fdct.go
go.mod switch to vanity import path Jun 2, 2019
go.sum add go.mod Jun 2, 2019
go_LICENSE include go license Sep 9, 2017
huffman.go reuse more of the image/jpeg exports Sep 19, 2017
jsteg_test.go reuse more of the image/jpeg exports Sep 19, 2017
reader.go switch to vanity import path Jun 2, 2019
scan.go reuse more of the image/jpeg exports Sep 19, 2017
writer.go reuse more of the image/jpeg exports Sep 19, 2017

README.md

jsteg

GoDoc Go Report Card

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.

Example

// 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.

You can’t perform that action at this time.