
Esteganografia JPEG
go get lukechampine.com/jsteg
jsteg é um pacote para ocultar dados dentro de arquivos jpeg, uma técnica conhecida como esteganografia. Isso é realizado copiando cada bit dos dados nos bits menos significativos da imagem. A quantidade de dados que pode ser ocultada depende do tamanho do arquivo jpeg; são necessários cerca de 10-14 bytes de jpeg para armazenar cada byte dos dados ocultos.
// open an existing jpeg
f, _ := os.Open(filename)
img, _ := jpeg.Decode(f)
// add hidden data to it
out, _ := os.Create(outfilename)
data := []byte("my secret data")
jsteg.Hide(out, img, data, nil)
// read hidden data:
hidden, _ := jsteg.Reveal(out)
Observe que os dados não são demarcados de forma alguma; o chamador é responsável por determinar quais bytes de hidden lhe interessam. A maneira mais fácil de fazer isso é prefixar os dados com seu comprimento.
Um comando jsteg está incluído, fornecendo um wrapper simples em torno das funções deste pacote. Ele pode ocultar e revelar dados em arquivos jpeg e suporta redirecionamento de entrada/saída. Ele lida automaticamente com prefixos de comprimento e usa um cabeçalho mágico para identificar jpegs que foram produzidos por jsteg.
Um comando mais focado, chamado slink, também está incluído. O slink incorpora uma chave pública em um jpeg e facilita a assinatura de dados e verificação de assinaturas usando pares de chaves derivados de strings de senha. Veja cmd/slink para uma descrição completa.
Os binários para ambos os comandos podem ser encontrados aqui.
Este pacote reutiliza uma quantidade significativa de código do pacote image/jpeg. A licença estilo BSD que rege o uso desse código pode ser encontrada no arquivo go_LICENSE.