jsteg

package module
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: May 11, 2023 License: MIT Imports: 6 Imported by: 2

README

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.

Documentation

Overview

Package jsteg implements JPEG steganography.

Index

Constants

This section is empty.

Variables

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.

Functions

func Capacity added in v1.1.0

func Capacity(m image.Image, o *jpeg.Options) int

Capacity returns the number of bytes that can be hidden in m. Default parameters are used if a nil *Options is passed.

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.

Types

This section is empty.

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

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