Стеганография — это библиотека, написанная на Pure go, позволяющая выполнять простую стеганографию LSB для изображений. Он способен как кодировать, так и декодировать изображения. Он может хранить файлы любого формата. Эта библиотека вдохновлена Stego от EthanWelsh, утилитой командной строки с той же целью.
go get - u github . com / auyer / steganography
Оригинал | Закодированный |
---|---|
Второе изображение содержит первый абзац описания стегозавра в Википедии, также доступного в качестве примера в example/message.txt.
package main
import (
"bufio"
"image/png"
"io/ioutil"
"github.com/auyer/steganography"
)
Режим записи используется для того, чтобы взять сообщение и встроить его в файл изображения с использованием стеганографии LSB, чтобы создать секретный файл изображения, который будет содержать ваше сообщение.
Обратите внимание, что минимальный размер изображения составляет 24 пикселя на один байт. На каждый дополнительный байт необходимо еще 3 пикселя.
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 ()
Примечание: все проверки ошибок были удалены для краткости, но их следует включить.
Режим длины можно использовать для предварительной проверки образа носителя и определения размера файла, который он может хранить.
sizeOfMessage := steganography . GetMessageSizeFromImage ( img ) // retrieves the size of the encoded message
Режим чтения используется для чтения изображения, закодированного с использованием стеганографии LSB, и извлечения скрытого сообщения из этого изображения.
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 ))
Примечание: все проверки ошибок были удалены для краткости, но их следует включить.
Полный пример см. в файле example/stego.go. Это приложение командной строки, основанное на исходной версии этого репозитория, но модифицированное для использования библиотеки стеганографии.