
Null-Abhängigkeits-Go-Bibliothek für LSB-Steganografie in Bildern: beliebige Dateien in PNG-Trägerbilder kodieren und versteckte Nachrichten dekodieren, mit Vorabprüfung der Nachrichtengröße.
Steganographie ist eine in reinem Go geschriebene Bibliothek, die eine einfache LSB-Steganographie auf Bildern ermöglicht. Sie ist sowohl zum Kodieren als auch zum Dekodieren von Bildern geeignet. Sie kann Dateien in jedem Format speichern. Diese Bibliothek ist von Stego von EthanWelsh inspiriert, einem Kommandozeilenwerkzeug mit demselben Zweck.
go get -u github.com/auyer/steganography
| Original | Kodiert |
|---|---|
![]() | ![]() |
Das zweite Bild enthält den ersten Absatz der Beschreibung eines Stegosaurus auf Wikipedia, der auch als Beispiel in examples/message.txt verfügbar ist.
package main
import (
"bufio"
"image/png"
"io/ioutil"
"github.com/auyer/steganography"
)
Der Schreibmodus wird verwendet, um eine Nachricht zu nehmen und sie mithilfe von LSB-Steganographie in eine Bilddatei einzubetten, um eine geheime Bilddatei zu erzeugen, die Ihre Nachricht enthält.
Beachten Sie, dass die minimale Bildgröße 24 Pixel für ein Byte beträgt. Für jedes weitere Byte sind 3 weitere Pixel erforderlich.
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()
Hinweis: Alle Fehlerprüfungen wurden der Kürze halber entfernt, sollten aber enthalten sein.
Der Längenmodus kann verwendet werden, um eine vorläufige Prüfung des Trägerbildes durchzuführen, um abzuleiten, wie groß eine Datei sein kann, die es speichern kann.
sizeOfMessage := steganography.GetMessageSizeFromImage(img) // retrieves the size of the encoded message
Der Lesemodus wird verwendet, um ein Bild zu lesen, das mit LSB-Steganographie kodiert wurde, und die versteckte Nachricht aus diesem Bild zu extrahieren.
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))
Hinweis: Alle Fehlerprüfungen wurden der Kürze halber entfernt, sollten aber enthalten sein.
Ein vollständiges Beispiel finden Sie in der Datei examples/stego.go. Es handelt sich um eine Kommandozeilenanwendung, die auf dem ursprünglichen Fork dieses Repositorys basiert, aber so modifiziert wurde, dass sie die Steganographie-Bibliothek verwendet.