From 1d5cd340b1d11eab8b41fc73c953a37376686e88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=9D=D0=B8=D0=BA?= =?UTF-8?q?=D0=BE=D0=BB=D0=B0=D0=B5=D0=B2?= Date: Thu, 11 Dec 2025 15:05:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index a38dde9..3bfd69b 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ - показать, как **спрятать фрагмент книги** в бинарный контейнер (encrypt); - показать, как **корректно его восстановить** по ключу (verify); -- продемонстрировать, что при знании исходной книги и наличии стего-контейнера можно выполнить **оптимизированный многопоточный перебор смещений** и восстановить и **ключ**, и **сам фрагмент текста** (hack). :contentReference[oaicite:1]{index=1} +- продемонстрировать, что при знании исходной книги и наличии стего-контейнера можно выполнить **оптимизированный многопоточный перебор смещений** и восстановить и **ключ**, и **сам фрагмент текста** (hack). --- @@ -30,9 +30,9 @@ - Генерирует ключ (набор битовых масок для 10 эталонов). - Сохраняет: - стего-контейнер: `--out <имя>.bin` (по умолчанию `output.bin`); - - ключ: `<имя>.key.bin`. :contentReference[oaicite:2]{index=2} + - ключ: `<имя>.key.bin`. -Фрагмент книги берётся из обычного текстового файла (например, художественного произведения). :contentReference[oaicite:3]{index=3} +Фрагмент книги берётся из обычного текстового файла (например, художественного произведения). --- @@ -45,7 +45,7 @@ - `--key <файл.key.bin>` — файл с ключом. - Программа инициализирует систему `AssocStego` с заданным ключом. - Через поток `AssocStegoStream` последовательно читает скрытые байты. -- Восстановленный текст выводится в консоль. :contentReference[oaicite:4]{index=4} +- Восстановленный текст выводится в консоль. :contentReference --- @@ -58,20 +58,20 @@ - `--data <файл.bin>` — стего-контейнер; - `--book <книга.txt>` — текст книги, в которой прятался фрагмент; - опционально `--threads ` — максимальное количество потоков; -- флаг `--verbose` для подробного вывода. :contentReference[oaicite:5]{index=5} +- флаг `--verbose` для подробного вывода. Алгоритм: 1. Читает стего-контейнер и текст книги. 2. По длине контейнера вычисляет количество скрытых байт. -3. Разбивает контейнер на блоки фиксированной длины (каждый байт → 3 стего-блока). :contentReference[oaicite:6]{index=6} +3. Разбивает контейнер на блоки фиксированной длины (каждый байт → 3 стего-блока). 4. Запускает многопоточный перебор всех возможных смещений в книге: - для каждого смещения: - рассматривает последовательность байт книги длиной, равной длине скрытого текста; - для каждого байта вычисляет десятичные цифры (d2, d1, d0); - по соответствующим стего-блокам и эталонам строит битовые маски для цифр 0–9; - быстрыми побитовыми операциями (`FastAndNotXor`, `FastPopCount`) отбрасывает заведомо неверные смещения; - - как только обнаружено смещение, дающее достаточно «информативные» маски (достаточное количество единичных битов), перебор останавливается. :contentReference[oaicite:7]{index=7} + - как только обнаружено смещение, дающее достаточно «информативные» маски (достаточное количество единичных битов), перебор останавливается. 5. При успехе: - извлекает фрагмент книги по найденному смещению; - формирует ключ (набор битовых масок) из полученных масок;