Coder Social home page Coder Social logo

auyer / steganography Goto Github PK

View Code? Open in Web Editor NEW
296.0 9.0 41.0 2.3 MB

Pure Golang Library that allows LSB steganography on images using ZERO dependencies

License: MIT License

Go 100.00%
go golang golang-library image image-processing library steganography zero-dependency

steganography's Introduction

Steganography Lib

GoDoc Go Report Card LICENSE MIT Actions CI codecov Mentioned in Awesome Go

Steganography is a library written in Pure go to allow simple LSB steganography on images. It is capable of both encoding and decoding images. It can store files of any format. This library is inspired by Stego by EthanWelsh, a command line utility with the same purpose.

Installation

go get -u github.com/auyer/steganography

Demonstration

Original Encoded
Original File Encoded File

The second image contains the first paragraph of the description of a stegosaurus on Wikipedia, also available in examples/message.txt as an example.


Getting Started

package main
import (
    "bufio"
    "image/png"
    "io/ioutil"

    "github.com/auyer/steganography"
)

Encode

Write mode is used to take a message and embed it into an image file using LSB steganography in order to produce a secret image file that will contain your message.

Note that the minimum image size is 24 pixels for one byte. For each additional byte, it is necessary 3 more pixels.

inFile, _ := os.Open("input_file.png") // opening file
reader := bufio.NewReader(inFile)   // buffer reader 
img, _ := png.Decode(reader)   // decoding to golang's image.Image

w := new(bytes.Buffer)   // buffer that will recieve the results
err := steganography.Encode(w, img, []byte("message")) // Encode the message into the image
if err != nil {
    log.Printf("Error Encoding file %v", err)
    return
}
outFile, _ := os.Create("out_file.png") // create file
w.WriteTo(outFile) // write buffer to it
outFile.Close()

note: all error checks were removed for brevity, but they should be included.

Size of Message

Length mode can be used in order to preform a preliminary check on the carrier image in order to deduce how large of a file it can store.

sizeOfMessage := steganography.GetMessageSizeFromImage(img) // retrieves the size of the encoded message

Decode

Read mode is used to read an image that has been encoded using LSB steganography, and extract the hidden message from that image.

inFile, _ := os.Open(encodedInputFile) // opening file
defer inFile.Close()

reader := bufio.NewReader(inFile) // buffer reader 
img, _ := png.Decode(reader) // decoding to golang's image.Image

sizeOfMessage := steganography.GetMessageSizeFromImage(img) // retrieving message size to decode in the next line

msg := steganography.Decode(sizeOfMessage, img) // decoding the message from the file
fmt.Println(string(msg))

note: all error checks were removed for brevity, but they should be included.

Complete Example

For a complete example, see the examples/stego.go file. It is a command line app based on the original fork of this repository, but modified to use the Steganography library.


Attributions

steganography's People

Contributors

auyer avatar ethanwelsh avatar scottleedavis avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

steganography's Issues

Following readme decode example gives errors in imageToRGBA

From this file (near copied from readme) https://github.com/scottleedavis/mattermost-plugin-watermark/blob/master/decode.go

func main() {
	inFile, _ := os.Open("./assets/test.jpg") // opening file
	inFile.Close()

	reader := bufio.NewReader(inFile) // buffer reader
	img, _, _ := image.Decode(reader) // decoding to golang's image.Image

	sizeOfMessage := steganography.GetMessageSizeFromImage(img) // retrieving message size to decode in the next line

	msg := steganography.Decode(sizeOfMessage, img) // decoding the message from the file
	fmt.Println(string(msg))
}

gives the following error when run

$ go run decode.go 
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x10b01e7]

goroutine 1 [running]:
gopkg.in/auyer/steganography%2ev2.imageToRGBA(0x0, 0x0, 0x0)
        /Users/scottd/go/pkg/mod/gopkg.in/auyer/[email protected]/steganography.go:339 +0x37
gopkg.in/auyer/steganography%2ev2.decode(0x400000000, 0x0, 0x0, 0x10c3080, 0x1, 0xc0000a8000)
        /Users/scottd/go/pkg/mod/gopkg.in/auyer/[email protected]/steganography.go:202 +0x35
gopkg.in/auyer/steganography%2ev2.GetMessageSizeFromImage(0x0, 0x0, 0x0)
        /Users/scottd/go/pkg/mod/gopkg.in/auyer/[email protected]/steganography.go:237 +0x48
main.main()
        /Users/scottd/workspace/mattermost-plugin-watermark/decode.go:20 +0x195
exit status 2

Provide a command line tool ?

Just an idea, it would be convenient to have a minimal command line tool to play with the library without having to write a main.go.

Does it work with jpg?

I'm using this library to encode some secrets into the image, but I'm not sure if it works with jpg.

The example has a jpg image, but maybe it's only during decoding.

Encode & decode in same memory/execution produce empty message output

During troubleshooting a failing test where this library is called by a plugin:
https://github.com/scottleedavis/mattermost-plugin-watermark/blob/master/server/plugin_test.go#L69-L78
I found what appears to be a bug where calling Encode & Decode during the same memory/execution of a program, produces an empty message. However, when an encode happens separately from a decode, everything seems to work as intended. (In my case running Encode via plugin inside mattermost, and later downloading the image and running Decode)

Two examples that fail on my system.

If there any glaring errors in any of the above code, please let me know!

Thank you for building this library! ๐Ÿ‘

Example doesen't work

The example provided does encode the file but it does not decode it. Also, it does not include the correct "github.com/auyer/steganography" must be replaced with "gopkg.in/auyer/steganography.v2"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.