
Bibliothèque Go sans dépendances pour la stéganographie LSB dans les images : encoder des fichiers arbitraires dans des images PNG porteuses et décoder des messages cachés, avec des prévérifications de la taille du message.
Steganography est une bibliothèque écrite en Go pur permettant une stéganographie LSB simple sur des images. Elle est capable d'encoder et de décoder des images. Elle peut stocker des fichiers de n'importe quel format. Cette bibliothèque est inspirée de Stego by EthanWelsh, un utilitaire en ligne de commande ayant le même objectif.
go get -u github.com/auyer/steganography
| Originale | Encodée |
|---|---|
![]() | ![]() |
La seconde image contient le premier paragraphe de la description d'un stégosaure sur Wikipédia, également disponible dans examples/message.txt à titre d'exemple.
package main
import (
"bufio"
"image/png"
"io/ioutil"
"github.com/auyer/steganography"
)
Le mode écriture est utilisé pour prendre un message et l'intégrer dans un fichier image en utilisant la stéganographie LSB afin de produire un fichier image secret qui contiendra votre message.
Notez que la taille minimale de l'image est de 24 pixels pour un octet. Pour chaque octet supplémentaire, 3 pixels de plus sont nécessaires.
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()
remarque : toutes les vérifications d'erreurs ont été supprimées par souci de concision, mais elles doivent être incluses.
Le mode longueur peut être utilisé afin d'effectuer une vérification préliminaire sur l'image porteuse pour déduire la taille de fichier qu'elle peut stocker.
sizeOfMessage := steganography.GetMessageSizeFromImage(img) // retrieves the size of the encoded message
Le mode lecture est utilisé pour lire une image qui a été encodée à l'aide de la stéganographie LSB, et extraire le message caché de cette 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))
remarque : toutes les vérifications d'erreurs ont été supprimées par souci de concision, mais elles doivent être incluses.
Pour un exemple complet, consultez le fichier examples/stego.go. Il s'agit d'une application en ligne de commande basée sur le fork original de ce dépôt, mais modifiée pour utiliser la bibliothèque Steganography.