
Biblioteca Go sem dependências para esteganografia LSB em imagens: codifica arquivos arbitrários em portadores PNG e decodifica mensagens ocultas, com verificações prévias do tamanho da mensagem.
Steganography é uma biblioteca escrita em Go puro para permitir esteganografia LSB simples em imagens. Ela é capaz tanto de codificar quanto de decodificar imagens. Ela pode armazenar arquivos de qualquer formato. Esta biblioteca é inspirada em Stego by EthanWelsh, um utilitário de linha de comando com o mesmo propósito.
go get -u github.com/auyer/steganography
| Original | Codificada |
|---|---|
![]() | ![]() |
A segunda imagem contém o primeiro parágrafo da descrição de um estegossauro na Wikipedia, também disponível em examples/message.txt como exemplo.
package main
import (
"bufio"
"image/png"
"io/ioutil"
"github.com/auyer/steganography"
)
O modo de escrita é usado para pegar uma mensagem e incorporá-la a um arquivo de imagem usando esteganografia LSB, a fim de produzir um arquivo de imagem secreto que conterá sua mensagem.
Observe que o tamanho mínimo da imagem é de 24 pixels para um byte. Para cada byte adicional, são necessários mais 3 pixels.
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()
observação: todas as verificações de erro foram removidas por brevidade, mas devem ser incluídas.
O modo de comprimento pode ser usado para realizar uma verificação preliminar na imagem portadora, a fim de deduzir qual o tamanho de arquivo que ela pode armazenar.
sizeOfMessage := steganography.GetMessageSizeFromImage(img) // retrieves the size of the encoded message
O modo de leitura é usado para ler uma imagem que foi codificada usando esteganografia LSB e extrair a mensagem oculta dessa imagem.
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))
observação: todas as verificações de erro foram removidas por brevidade, mas devem ser incluídas.
Para um exemplo completo, veja o arquivo examples/stego.go. É um aplicativo de linha de comando baseado no fork original deste repositório, mas modificado para usar a biblioteca Steganography.