
Простая программа стеганографии на основе метода LSB.
Программа для кодирования информации в файлах изображений, аудио и видео с помощью стеганографии. Можно закодировать любые данные — от необработанных строк до файлов, как показано ниже:
Слева — дом со стеганографически скрытым изображением. Справа — извлечённое скрытое изображение кота. Оно проявляется при удалении всех битов, кроме младшего значащего бита каждой цветовой компоненты исходного изображения.
Для носителей JPEG используется встраивание в DCT-коэффициенты. В CLI другие форматы изображений, читаемые Pillow, при сохранении конвертируются в PNG. Веб-API принимает только перечисленные выше форматы. WAV — единственный поддерживаемый аудиоформат.
Видео-носители декодируются с помощью FFmpeg, встраивание выполняется покадрово с использованием устойчивого DCT-сигнала, а результат записывается обратно в MP4/H.264. Видеодекодер предназначен для файлов, созданных видеокодером stegpy; произвольные видео без полезной нагрузки stegpy не позволят декодировать полезные данные. Обработка видео намеренно отключена в публичном веб-демо, поскольку она может интенсивно нагружать CPU; для видео-носителей используйте CLI или запустите веб-приложение локально.
Для поддержки видео также требуются утилиты командной строки ffmpeg и ffprobe.
Установите текущий релиз из PyPI как инструмент командной строки с помощью uv:
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 МБ, а текстовые сообщения — 1 МБ. Отображение ёмкости показывает доступные байты полезной нагрузки после заголовка stegpy, встроенного имени файла и накладных расходов на шифрование.
Видео-носители доступны в веб-интерфейсе только при запуске на localhost, поскольку обработка видео может надолго загрузить CPU небольшого сервера. Локальный веб-интерфейс принимает видео-носители размером до 5 МБ.
API также предоставляет GET /api/health, POST /api/capacity,
POST /api/encode и POST /api/decode. Интерактивная документация API
доступна по адресу http://127.0.0.1:8000/docs при локальном запуске.
Пожертвования приветствуются, если вы находите этот проект полезным.
Ethereum / EVM: 0xfE1039ba2d4973eb6F6dd1cF3BDAF24aa6cbff96