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, ",")
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.