
Libreria Go senza dipendenze per la steganografia LSB nelle immagini: codifica file arbitrari in carrier PNG e decodifica messaggi nascosti, con precontrolli sulla dimensione del messaggio.
Steganography è una libreria scritta in Go puro che consente una semplice steganografia LSB sulle immagini. È in grado sia di codificare che di decodificare immagini. Può memorizzare file di qualsiasi formato. Questa libreria è ispirata a Stego di EthanWelsh, un'utilità da riga di comando con lo stesso scopo.
go get -u github.com/auyer/steganography
| Originale | Codificata |
|---|---|
![]() | ![]() |
La seconda immagine contiene il primo paragrafo della descrizione di uno stegosauro su Wikipedia, disponibile anche in examples/message.txt come esempio.
package main
import (
"bufio"
"image/png"
"io/ioutil"
"github.com/auyer/steganography"
)
La modalità di scrittura viene utilizzata per prendere un messaggio e incorporarlo in un file immagine usando la steganografia LSB, al fine di produrre un file immagine segreto che conterrà il tuo messaggio.
Nota che la dimensione minima dell'immagine è di 24 pixel per un byte. Per ogni byte aggiuntivo sono necessari altri 3 pixel.
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()
nota: tutti i controlli degli errori sono stati rimossi per brevità, ma dovrebbero essere inclusi.
La modalità lunghezza può essere utilizzata per eseguire un controllo preliminare sull'immagine portante al fine di dedurre quanto grande possa essere il file che può memorizzare.
sizeOfMessage := steganography.GetMessageSizeFromImage(img) // retrieves the size of the encoded message
La modalità di lettura viene utilizzata per leggere un'immagine che è stata codificata usando la steganografia LSB ed estrarre da essa il messaggio nascosto.
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))
nota: tutti i controlli degli errori sono stati rimossi per brevità, ma dovrebbero essere inclusi.
Per un esempio completo, consulta il file examples/stego.go. È un'app da riga di comando basata sul fork originale di questo repository, ma modificata per utilizzare la libreria Steganography.