ImageSteg · Скрыть данные в изображении или аудиофайле

Браузерный порт steghide 0.5.1 с обоими методами: pixel/LSB для BMP и PNG, коэффициенты DCT для JPEG — плюс аудионосители PCM WAV и MP3. Скройте файл или сообщение, затем извлеките по парольной фразе.

100% локально

Файл и секрет не покидают это устройство. Декодирование, встраивание, шифрование и извлечение выполняются в этой вкладке. На сервер ничего не отправляется, поэтому оттуда нечему утечь.

1 · Изображение или аудионоситель

Перетащите изображение или аудиофайл JPEG, PNG, WebP, GIF, BMP, PCM WAV или MP3 · локальное декодирование, без отправки

Большие контейнеры вмещают больше: изображения дают примерно байт на восемь пикселей, PCM WAV — байт на шестнадцать отсчётов, MP3 — свободное место в аудиокадрах.

2 · Данные для скрытия

Файл не выбран

3 · Парольная фраза & параметры

Три простых шага

Как скрыть файл в изображении или аудио

Без установки и отправки: выберите изображение, WAV или MP3, добавьте секрет и сохраните результат.

1

Выберите изображение или аудионоситель

Выберите, перетащите или вставьте изображение, WAV или MP3 для хранения данных. Большие файлы вмещают больше, а детальные фотографии и музыка лучше скрывают изменения.

2

Добавьте секрет и парольную фразу

Прикрепите файл или введите сообщение, затем задайте парольную фразу. Она определяет места распределения данных и при желании шифрует их.

3

Скачайте и поделитесь

Сохраните BMP для совместимости со steghide или PNG для меньшего размера. Любой, у кого есть изображение и парольная фраза, сможет извлечь данные.

Алгоритмы steghide и аудионосители в браузере

Паросочетание графов на пикселях, коэффициентах DCT и аудиоотсчётах

ImageSteg — порт steghide 0.5.1 на TypeScript с обеими ветвями: pixel/LSB для BMP и PNG и DCT для JPEG. Также он хранит данные аналогичным образом в PCM WAV и в неиспользуемых хвостах кадров MP3. Ни один метод не обходит файл просто по порядку.

Встраивание на основе графов

Отсчёты объединяются в вершины, а паросочетание минимального веса решает, что изменить, поэтому затрагивается примерно один отсчёт на скрытое значение.

Настоящая стеганография JPEG DCT

Встроенный энтропийный кодек JPEG читает квантованные коэффициенты DCT, скрывает данные в их чётности и кодирует обратно — на том же этапе, где останавливается libjpeg в steghide. Поддерживаются baseline и progressive.

Распределение по парольной фразе

Перестановка с seed на основе MD5 распределяет данные по всему изображению, поэтому скрытое содержимое не хранится в предсказуемом порядке.

Сжатие и контрольная сумма

zlib уменьшает данные перед встраиванием, а необязательная CRC32 сразу показывает, можно ли доверять извлечению.

Необязательное шифрование AES-256

Rijndael в режиме CBC с тем же выводом ключа, что у libmcrypt, сохраняет содержимое в тайне, даже если изображение вызывает подозрения.

Чего ожидать

Ёмкость, скорость и совместимость

Практические ограничения скрытия данных в пикселях изображения.

BMP · PNGветвь pixel / LSB
JPEGветвь коэффициентов DCT
0.2 %типичная доля изменяемых отсчётов
0 отправоквсё остаётся в браузере

Совместимость: структура битов, перестановка отсчётов и шифрование Rijndael/CBC соответствуют steghide 0.5.1, поэтому BMP и JPEG можно прочитать через steghide extract -sf image.bmp -p passphrase или -sf image.jpg, а файлы командного steghide — открыть здесь. Формат результата всегда соответствует носителю: JPEG даёт JPEG, поскольку данные находятся в коэффициентах, которые хранит только JPEG. Для пиксельных носителей вместе с BMP предлагается PNG; steghide CLI не читает PNG.

Подробнее о ветви JPEG

Поддержка JPEG в steghide вызывает функцию libjpeg jpeg_read_coefficients(), которая останавливает декодирование сразу после Huffman, до деквантования и IDCT. Остаются исходные квантованные коэффициенты DCT. Браузеры не предоставляют API для них, поэтому страница использует собственный энтропийный JPEG-кодек, а не встроенный декодер. Поддерживаются baseline и progressive, включая уточняющие сканы последовательного приближения.

Тот же алгоритм для PNG

Встраиватель не видит формат файла — он работает только с декодированным массивом пикселей, поэтому метод BMP/LSB steghide переносится на PNG без изменений. Важны четыре детали:

Вопросы и ответы

Вопросы об ImageSteg

ImageSteg бесплатен?

Да. Скрытие и извлечение бесплатны, без регистрации, водяных знаков и искусственного ограничения размера файла.

Отправляется ли изображение или секретный файл?

Нет. Декодирование, встраивание, сжатие и шифрование выполняются локально JavaScript и WebCrypto в браузере. Сервер 73hi ничего не получает.

Какие форматы изображений поддерживаются?

Любое декодируемое браузером изображение может быть пиксельным носителем, а baseline и progressive JPEG используют ветвь DCT steghide. Формат результата повторяет носитель: JPEG на входе и выходе; пиксельный носитель даёт BMP и копию PNG. Командный steghide читает BMP и JPEG, но не PNG.

Как режим JPEG скрывает данные?

В квантованных коэффициентах DCT, как командный steghide. Страница содержит энтропийный JPEG-кодек, декодирующий скан до коэффициентов, меняющий их чётность и кодирующий обратно.

Можно ли использовать progressive JPEG?

Да. Progressive-файлы декодируются через всю последовательность сканов — спектральный выбор и уточнение последовательным приближением — и записываются так же. Результат остаётся progressive JPEG с исходными коэффициентами.

А JPEG с арифметическим кодированием?

Поддерживается чтение. Файлы с QM (двоичным арифметическим) кодированием вместо Huffman — SOF9 для sequential, SOF10 для progressive — читаются тем же арифметическим декодером, что и libjpeg, поэтому коэффициенты идентичны. Результат записывается с Huffman, как у steghide.

Сколько данных можно скрыть?

Примерно байт содержимого на восемь пикселей за вычетом места для заголовка, имени файла и необязательных накладных расходов шифрования. После выбора изображения инструмент покажет доступную ёмкость.

Может ли командный steghide прочитать результат?

Да, если скачать BMP. Структура битов, перестановка по парольной фразе и шифрование Rijndael/CBC соответствуют steghide 0.5.1.

Почему после редактирования изображение не извлекается?

Данные хранятся в отдельных значениях пикселей. Повторное сжатие, масштабирование, фильтр или перевод в формат с потерями, например JPEG, уничтожает их. Храните исходный BMP или PNG без потерь.

Можно ли скрыть два секрета в одном изображении?

Не двумя встраиваниями в один файл. Второй проход выбирает свои случайные позиции по всему носителю и перезаписывает часть первого содержимого. Поскольку перед шифрованием данные сжимаются, несколько изменённых битов делают всё сообщение нечитаемым — оно теряется полностью, а не частично. Оригинальный командный steghide ведёт себя так же. Повтор той же парольной фразы не помогает: позиции перезаписываются с начала, остаётся только новое сообщение. Для настоящих слоёв вкладывайте файлы: скройте первый секрет в небольшом изображении, скачайте результат, затем скройте весь файл в большем изображении с другой фразой. Каждый слой сохраняется побайтно, поскольку переносится как защищённые данные, а не изменяемые пиксели.

Уничтожает ли открытие изображения уже скрытые данные?

Нет. Загрузка лишь читает байты: JPEG-носители сразу переходят к квантованным DCT без обратного преобразования или повторного квантования, а пиксельные носители декодируются без потерь. Данные остаются нетронутыми. Размер JPEG может немного измениться из-за перезаписи энтропийного кодирования, но это не влияет на содержимое. Можно безопасно открыть чужой подготовленный файл и извлечь секрет.

Поможет ли ImageSteg защитить авторские права?

Да. Встройте уведомление об авторском праве или доказательство владения прямо в фото. Данные находятся в пикселях или коэффициентах JPEG и невидимы при обычном просмотре, поэтому изображением можно делиться публично. При использовании без разрешения скрытая отметка остаётся в файле. Когда вы публикуете ту же картинку на сторонней платформе для фиксации нарушения, опубликованная копия тоже содержит доказательство, которое поможет обосновать удаление или претензию.

Можно ли скрыть сообщение, которое стесняюсь сказать лично?

Конечно. Спрячьте «Я тебя люблю» или другие трудные для личного разговора слова в обычном повседневном фото, задав парольной фразой день рождения получателя. Отправьте фото и попросите открыть его в ImageSteg (или на 73hi.com/image-steg.html). Только знающий фразу сможет прочитать слова — так можно выразить чувства без неловкости произнесения вслух.