
go get lukechampine.com/jsteg
jsteg は、JPEG ファイル内にデータを隠すためのパッケージです。この手法は ステガノグラフィ として知られています。これは、データの各ビットを画像の最下位ビットにコピーすることで実現されます。隠せるデータ量は JPEG のファイルサイズに依存し、隠しデータの 1 バイトあたり約 10~14 バイトの JPEG が必要です。
// 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)
データには区切りがないことに注意してください。呼び出し側は、hidden のどのバイトに関心があるかを判断する責任があります。これを行う最も簡単な方法は、データの前にその長さを付加することです。
jsteg コマンドが含まれており、このパッケージの関数を簡単にラップします。JPEG ファイル内のデータを隠したり明らかにしたりでき、入出力リダイレクションをサポートします。長さプレフィックスを自動的に処理し、jsteg によって生成された JPEG を識別するためのマジックヘッダーを使用します。
より焦点を絞った slink というコマンドも含まれています。slink は JPEG に公開鍵を埋め込み、パスワード文字列から派生したキーペアを使用してデータの署名と署名の検証を簡単に行えます。詳細は cmd/slink を参照してください。
両方のコマンドのバイナリは こちら にあります。
このパッケージは image/jpeg パッケージから多くのコードを再利用しています。そのコードの使用を規定する BSD スタイルのライセンスは go_LICENSE ファイルにあります。