Steganography est une bibliothèque écrite en Pure go pour permettre une stéganographie LSB simple sur des images. Il est capable à la fois d’encoder et de décoder des images. Il peut stocker des fichiers de n'importe quel format. Cette bibliothèque est inspirée de Stego d'EthanWelsh, un utilitaire de ligne de commande ayant le même objectif.
go get - u github . com / auyer / steganography
Original | Codé |
---|---|
La deuxième 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, il faut 3 pixels supplémentaires.
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 : tous les contrôles d'erreur ont été supprimés par souci de concision, mais ils doivent être inclus.
Le mode Longueur peut être utilisé afin d'effectuer une vérification préliminaire sur l'image porteuse afin de déduire la taille d'un 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é codé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 : tous les contrôles d'erreur ont été supprimés par souci de concision, mais ils doivent être inclus.
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 référentiel, mais modifiée pour utiliser la bibliothèque Steganography.