stego: Steganography package in Go

Package organization

Stego provides a serialization scheme and an interface for implementations of specific steganographic techniques. Using the interface, you can use your own serialization or your custom steganography tricks.

The serialization scheme provides

  • Automatic compression (as long as compression makes it smaller)
  • Built-in checksum (so you know someone really hid that data there)
  • Optional encryption, using a random IV each time, allowing reuse of keys.

Some example steganography implementations:

  • stego/permute: hide data in the ordering of an "unordered" sequence.
  • TODO: stego/lsb: hide data (very undetectably) in unique LSB's of a png.

Example usage

Say you have a list of strings to serialize unordered, but you want to embed a message in the unused entropy.

import (

func SneakilySerializeStrings(seq []string, message string) string {
    var bh stego.BitHider
    bh = permute.NewHider(sort.StringSlice(seq))
    err := stego.HideData(bh, []byte(message), []byte("mysekritpassword"))
    if err != nil {
    return strings.Join(seq, ",")