Esteganografia é uma biblioteca escrita em Pure go para permitir esteganografia LSB simples em imagens. É capaz de codificar e decodificar imagens. Ele pode armazenar arquivos de qualquer formato. Esta biblioteca é inspirada no Stego by EthanWelsh, um utilitário de linha de comando com o mesmo propósito.
go get - u github . com / auyer / steganography
Original | Codificado |
---|---|
A segunda imagem contém o primeiro parágrafo da descrição de um estegossauro na Wikipedia, também disponível em exemplos/message.txt como exemplo.
package main
import (
"bufio"
"image/png"
"io/ioutil"
"github.com/auyer/steganography"
)
O modo de gravação é usado para pegar uma mensagem e incorporá-la em um arquivo de imagem usando esteganografia LSB para produzir um arquivo de imagem secreto que conterá sua mensagem.
Observe que o tamanho mínimo da imagem é 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 ()
nota: todas as verificações de erros foram removidas por questões de brevidade, mas devem ser incluídas.
O modo de comprimento pode ser usado para realizar uma verificação preliminar na imagem transportadora, a fim de deduzir o tamanho do 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 ))
nota: todas as verificações de erros foram removidas por questões de brevidade, mas devem ser incluídas.
Para um exemplo completo, consulte o arquivo exemplos/stego.go. É um aplicativo de linha de comando baseado no fork original deste repositório, mas modificado para usar a biblioteca Steganography.