
Biblioteca Go sin dependencias para esteganografía LSB en imágenes: codifica archivos arbitrarios en portadores PNG y decodifica mensajes ocultos, con comprobaciones previas del tamaño del mensaje.
Steganography es una biblioteca escrita en Go puro que permite realizar esteganografía LSB simple sobre imágenes. Es capaz tanto de codificar como de decodificar imágenes. Puede almacenar archivos de cualquier formato. Esta biblioteca está inspirada en Stego de EthanWelsh, una utilidad de línea de comandos con el mismo propósito.
go get -u github.com/auyer/steganography
| Original | Codificada |
|---|---|
![]() | ![]() |
La segunda imagen contiene el primer párrafo de la descripción de un estegosaurio en Wikipedia, también disponible en examples/message.txt como ejemplo.
package main
import (
"bufio"
"image/png"
"io/ioutil"
"github.com/auyer/steganography"
)
El modo de escritura se utiliza para tomar un mensaje e incrustarlo en un archivo de imagen mediante esteganografía LSB, con el fin de producir un archivo de imagen secreto que contendrá tu mensaje.
Ten en cuenta que el tamaño mínimo de imagen es de 24 píxeles para un byte. Por cada byte adicional, se necesitan 3 píxeles más.
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: todas las comprobaciones de errores se han eliminado por brevedad, pero deberían incluirse.
El modo de longitud se puede utilizar para realizar una comprobación preliminar sobre la imagen portadora y así deducir qué tamaño de archivo puede almacenar.
sizeOfMessage := steganography.GetMessageSizeFromImage(img) // retrieves the size of the encoded message
El modo de lectura se utiliza para leer una imagen que ha sido codificada mediante esteganografía LSB y extraer el mensaje oculto de esa imagen.
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: todas las comprobaciones de errores se han eliminado por brevedad, pero deberían incluirse.
Para ver un ejemplo completo, consulta el archivo examples/stego.go. Es una aplicación de línea de comandos basada en el fork original de este repositorio, pero modificada para usar la biblioteca Steganography.