
画像内のLSBステガノグラフィのための依存関係ゼロのGoライブラリ:任意のファイルをPNGキャリアにエンコードし、隠されたメッセージをデコードできます。メッセージサイズの事前チェック機能付き。
Steganographyは、画像に対するシンプルなLSBステガノグラフィを可能にするためにPure Goで書かれたライブラリです。画像のエンコードとデコードの両方に対応しています。あらゆる形式のファイルを格納できます。 このライブラリは、同じ目的を持つコマンドラインユーティリティであるStego by EthanWelshにインスパイアされています。
go get -u github.com/auyer/steganography
| オリジナル | エンコード済み |
|---|---|
![]() | ![]() |
2番目の画像には、Wikipediaにあるステゴサウルスの説明の最初の段落が含まれており、例としてexamples/message.txtでも利用できます。
package main
import (
"bufio"
"image/png"
"io/ioutil"
"github.com/auyer/steganography"
)
書き込みモードは、メッセージを受け取り、LSBステガノグラフィを使用して画像ファイルに埋め込むことで、あなたのメッセージを含む秘密の画像ファイルを生成するために使用されます。
最小画像サイズは1バイトにつき24ピクセルであることに注意してください。追加の1バイトごとに、さらに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))
注: 簡潔にするためすべてのエラーチェックは削除されていますが、これらは含めるべきです。
完全な例については、examples/stego.goファイルを参照してください。これはこのリポジトリの元のフォークに基づくコマンドラインアプリですが、Steganographyライブラリを使用するように変更されています。