Шифровальщик картинок (с использованием Perfect Shuffle). Чтобы мамка не заругала1
Perfect shuffle - это не танцы ногами из тиктока, а перемешивание карт. Берешь колоду, делишь на две половины, и перемешиваешь так, чтобы чередовались карты из первой половины и из второй. Если первая карта идет из второй половины - это in-shuffle, если из второй - out-shuffle.
Не понятно. Хорошо. Вот на картиночках объяснение.
in-shuffle - первая карта из второй половины (5) идет вперед:
out-shuffle - первая карта из первой половины (1) идет вперед
Чередуя in-shuffle и out-shuffle мы запутываем колоду так, что распутать ее практически невозможно, не зная поочередности in/out.
Собственно поочередность in/out - это и будет наш ключ шифрования.
Дальше больше. Вместо перемешивания строки, мы можем перемешивать пиксели - то есть, столбики и строки на картинке. Делим картинку на 4 сегмента-квадратика и перемешиваем. Опять же чередуя in/out.
Допустим, ты Андрей Максимович, хочешь передать своему другу Дмитрию Геннадиевичу фотку своего котяры, но не хочешь, чтобы её увидел Петр Борисович.
Перемешиваешь картинку, отправляешь другу. Друг, используя ключ, восстанавливает оригинальную картинку. Борисыч даже брутфорсом ничего не сделает - количество комбинаций слишком внушительное.
В качестве примера, будем использовать фотку Конфуция:
После перемешивания:
Ключ шифрования:
0101010010100111001100010110100110101011010101101001011110011011
mode: [1, 0, 0, 0]
Mode? Да! Для создания пущей энтропии. Помнишь, мы делили картинку на 4 квадратика-сегмента. Вот mode определяет трансформации, применяемые к этим сегментам перед перемешиванием. Например [1, 0, 0, 0] означает, что мы вращаем левый верхний квадратик на 90 градусов, остальные 3 квадратика не трогаем.
Если Борисыч даже 1 бит в ключе перепутает - вместо оригинала получит шум (в примере ниже перепутан последний бит в ключе):
Вот тут репозиторий вам выкатил:
Там куча непонятного текста, который можешь сразу пропускать и переходить к онлайн демо:
Инструкция:
Шифровать:
1. Загружаешь картинку туда, где кнопка "Shuffle →" (левая сторона).
2. Жмякай "Random Modes".
3. Автоматически сгенерируется случайный ключ 64 бита.
4. Этот ключ, сгенерированную картинку и Mode отправляешь Дмитрию.
Расшифровать:
2. Загружаешь зашифрованную картинку в правую половину, где кнопка "← Unshuffle".
3. Снимаешь галочку с "Generate new key" и вставляешь туда ключ.
4. Выставляешь Mode.
5. Жмякай "← Unshuffle".
Фракталы:
1. Ставишь галочку "Resize image", оставляешь 1024 (2^10)
2. Снимаешь галочку с "Generate new key", вводишь ключ 10 единиц: 1111111111
3. Жмякай "Random Modes".
Конфуций в качестве примера:
Оригинальный Конфуций скукоженный до 512х512
Ключ 9 единиц, "Randome Modes":










Фрактальные Конфуции