
ステガノグラフィーを用いて画像、音声、動画ファイルに情報をエンコードするプログラムです。以下に示すように、生の文字列からファイルまで、あらゆる種類のデータをエンコードできます:
左側は、ステガノグラフィーで画像が隠された家です。右側は、抽出された隠し画像である猫です。これは、ホスト画像の各色成分の最下位ビット以外をすべて除去することで明らかになります。
JPEGホストはDCT係数への埋め込みを使用します。CLIでは、Pillowで読み取り可能なその他の画像形式は、保存時にPNGに変換されます。Web APIは上記に挙げた形式のみを受け付けます。対応する音声形式はWAVのみです。
動画ホストはFFmpegでデコードされ、堅牢なDCT信号を用いてフレームごとに埋め込みが行われ、MP4/H.264として書き戻されます。動画デコーダーはstegpyの動画エンコーダーで作成されたファイルを対象としています。stegpyのペイロードを持たない任意の動画からは、有用なデータをデコードできません。動画処理はCPU負荷が高くなる可能性があるため、ホストされている公開Webデモでは意図的に無効化されています。動画ホストを扱う場合は、CLIを使用するか、Webアプリをローカルで実行してください。
動画サポートには、ffmpeg および ffprobe コマンドラインツールも必要です。
現在のリリースを uv を使ってコマンドラインツールとしてPyPIからインストールします:
uv tool install stegpy
stegpy -h
既存のインストールをアップグレードするには:
uv tool upgrade stegpy
開発用には、リポジトリをクローンし、uv で環境を作成します:
git clone https://github.com/izcoser/stegpy.git
cd stegpy
uv sync --dev
uv run stegpy -h
stegpy "Hello World!" image.png
stegpy _image.png
stegpy "Hello video!" clip.mp4
stegpy _clip.mp4
動画入力は、上記に挙げたFFmpegで読み取り可能な対応コンテナであれば何でも構いません。stegpyは常に、エンコードされた動画出力をMP4/H.264として書き出します。
データはデフォルトでは保護なしでエンコードされますが、-p フラグを使って暗号化できます:
stegpy "Hello World!" image.png -p
Enter password (will not be echoed):
Verify password (will not be echoed):
stegpy _image.png -p
Enter password (will not be echoed):
Hello World!
stegpy -h
Pythonパッケージを基盤とするライブデモは https://stegpy.coseri.xyz で利用できます。
リポジトリからFastAPIアプリケーションとブラウザデモをローカルで実行します:
uv run uvicorn stegpy.web:app --reload
その後、http://127.0.0.1:8000 を開きます。web-demo/ 内の静的ファイルは
FastAPIの /api/* バックエンドを必要とし、index.html を直接開いても動作しません。
ホストされているデモは、PNG、BMP、GIF、WebP、WAV、JPEGホスト、テキストまたはファイルの ペイロード、およびオプションのパスワード暗号化をサポートしています。画像/音声ホストおよびファイルペイロードの アップロードは20 MBに制限され、テキストメッセージは1 MBに制限されます。容量 表示には、stegpyヘッダー、埋め込まれたファイル名、および暗号化のオーバーヘッドを除いた 使用可能なペイロードバイト数が表示されます。
動画処理は小規模なサーバーのCPUを数分間占有する可能性があるため、動画ホストは localhostで実行している場合にのみWeb UIで利用できます。ローカルWeb UIは 最大5 MBの動画ホストを受け付けます。
APIはまた、GET /api/health、POST /api/capacity、
POST /api/encode、および POST /api/decode を公開しています。インタラクティブなAPIドキュメントは
ローカルで実行している場合、http://127.0.0.1:8000/docs で利用できます。
このプロジェクトが役に立ったと思われた方は、寄付をいただけると幸いです。
Ethereum / EVM: 0xfE1039ba2d4973eb6F6dd1cF3BDAF24aa6cbff96