
Least Significant Bitを使用して画像にファイルをステガノグラフィーするPythonプログラム。
Pythonプログラムで、ステガノグラフィ手法を用いて画像内にファイルを隠すためのものです。最も基本的な方法である最下位ビット(LSB)技術を使用しています。
カラーピクセルは赤、緑、青で構成され、それぞれ1バイトでエンコードされています。このアイデアは、各ピクセルのRGB成分の最初のビットに情報を格納するというものです。最悪の場合でも、10進数の値の違いは1で、人間の目には見えません。実際には、すべてのデータを各ピクセルの最初のビットだけに収めるスペースがない場合は、2番目のビットを使い始める必要があります。画像内にデータを多く格納するほど、検出されやすくなることに注意してください。
LSBStegモジュールはOpenCVをベースにしており、画像にデータを隠します。各ピクセルの最初のビットと、画像のすべての色を使用します。コードは非常にシンプルで理解しやすいです。最初のビットがすべて使用されると、モジュールは2番目のビットを使い始めるため、データが大きいほど画像の変化が大きくなります。 プログラムは、画像内に十分なスペースがあれば、すべてのデータを隠すことができます。主な機能は以下の通りです。
圧縮されていない画像のみがサポートされています。つまり、JPEGはLSBビットが圧縮フェーズで改変される可能性があるため、サポートされていません。
このツールはOpenCVとその依存関係のみが必要です。
pip install -r requirements.txt
LSBSteg.py
Usage:
LSBSteg.py encode -i <input> -o <output> -f <file>
LSBSteg.py decode -i <input> -o <output>
Options:
-h, --help Show this help
--version Show the version
-f,--file=<file> File to hide
-i,--in=<input> Input image (carrier)
-o,--out=<output> Output image (or extracted file)
テキストのエンコード:
#encoding
steg = LSBSteg(cv2.imread("my_image.png"))
img_encoded = steg.encode_text("my message")
cv2.imwrite("my_new_image.png", img_encoded)
#decoding
im = cv2.imread("my_new_image.png")
steg = LSBSteg(im)
print("Text value:",steg.decode_text())
画像ステガノグラフィ:
#encoding
steg = LSBSteg(cv2.imread("carrier.png")
new_im = steg.encode_image(cv2.imread("secret_image.jpg"))
cv2.imwrite("new_image.png", new_im)
#decoding
steg = LSBSteg("new_image.png")
orig_im = steg.decode_image()
cv.SaveImage("recovered.png", orig_im)
バイナリステガノグラフィ:
#encoding
steg = LSBSteg(cv2.imread("carrier.png"))
data = open("my_data.bin", "rb").read()
new_img = steg.encode_binary(data)
cv2.imwrite("new_image.png", new_img)
#decoding
steg = LSBSteg(cv2.imread("new_image.png"))
binary = steg.decode_binary()
with open("recovered.bin", "rb") as f:
f.write(data)
このソフトウェアはMITライセンスです。