Каталог@Mail.ru - каталог ресурсов интернет HitMeter - счетчик посетителей сайта, бесплатная статистика

ШИФРОВАНИЕ ПО МЕТОДУ МАГИЧЕСКИХ КВАДРАТОВ

Другие шифры На главную Хеш-функции

Описание метода магических квадратов

Нормальные магические квадраты размера n*n - квадратные таблицы размера n со следующими свойствами:
1) в каждой клетке одно из натуральных чисел, не большее n*n;
2) по каждой строке, каждому столбцу, а также любой из двух диагоналей размера n получаем одинаковую сумму.

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

Можно вывести, что "одинаковая сумма" по каждой строке, столбцу, диагонали магического квадрата равна

Скажем, в случае составления магического квадрата 3*3 (при n = 3) нужно расставить числа от 1 до 9 так, чтобы по горизонтали, вертикали и главных диагоналях сумма равнялась 15.
Если убираем свойство 1), но оставляем 2) и предполагаем отсутствие одинаковых чисел в клетках, получаем определение произвольного магического квадрата, но это нам не нужно.


Пусть у нас есть нормальный магический квадрат. Открытый текст разбиваем на блоки размера n*n. Если длина текста не кратна сей величине, добавляем в хвост пробелы. Каждый блок шифруем отдельно, результаты объединяем в шифрованный текст.
Как шифровать блок? Объясним на примере конкретного магического квадрата, так проще. Допустим, такого:
276
951
438

Ясно, что в блоке должно быть 3*3 = 9 символов. Занимаемся перестановкой символов в нём.

Как это сделать? Представляем магический квадрат в виде вектора [2, 7, 6, 9, 5, 1, 4, 3, 8]. Если k-ый элемент вектора равен m, то k-ый символ блока должен стать m-ым. Так, первый символ исходного блока в преобразованном блоке станет вторым и уступит место тому, который изначально был шестым.

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

Наверное, надо зашифровать что-нибудь. Допустим, у нас есть слово ПРОТИВНИК. Квадратик возьмём тот, что нарисован выше, то есть блок единственный. Первым символом должен стать тот, что у нас сейчас шестой, то есть это В, вторым - тот, что сейчас первый, то есть П, третьим - нынешний восьмой, то есть И. И так далее. Итог - ВПИНИОРКТ. Вот так поиздевались над врагом! Даже НАТО скоро в ужасе будет... Кстати, символ, который был пятым, так и остался пятым. Посмотрим на вектор: пятый элемент равен самой же пятёрке. Но это не всегда так, смотря какой квадрат.

Кстати, можно сделать так, чтобы расшифрование в методе магических квадратов производилось по тому же алгоритму, что и шифрование - можно будет тупо всегда жать на кнопку "шифрануть". Для этого нужно такое условие: если k-ый элемент вектора, полученного из квадрата, равен m, то m-ый должен быть равен k, то есть символ открытого текста должен или оставаться на месте, или меняться местами с каким-то другим. Именно меняться местами - если Икс спихнул со стула Игрека, то Игрек должен сесть на стул Икса, а не искать, какой стул освободить кулаком да силой. И так для каждого элемента.

В демонстрации справа приведён такой магический квадрат. "Магическее" всех магических. Заметьте: 1-ый символ становится на позицию 16, а 16-ый - на позицию 1, а не ещё куда-то, то есть получается "обмен", не затрагивающий прочие позиции. Впрочем, на других позициях творится нечто похожее. Символ 2 становится на место символа 3 и "уступает" ему старую позицию. И так далее.

Но не всегда возможно, чтобы перестановка шла столь просто и красиво. Таких магических квадратов 3*3 вообще нельзя составить. Тогда расшифрование ведём вот как: если k-ый элемент вектора равен m, то k-ым символом восстанавливаемого блока становится m-ый символ шифрованного. В приведённом примере, скажем, первым символом исходного блока будет второй символ шифрованного. Шифрованный - ВПИНИОРКТ. Вторым идёт П - значит, исходный блок начинался с П. Вроде бы слово ПРОТИВНИК не начиналось никогда с чего-то ещё. Второй элемент вектора [2, 7, 6, 9, 5, 1, 4, 3, 8] равен 7, в шифрованном тексте на позиции 7 стоит Р, то есть в открытом тексте второй буквой была Р. Ну кто не нуб, тот понял)))

Демонстрация метода магических квадратов

276
951
438
163213
96712
510118
415141

Выбор квадрата

Контрольные примеры: для квадрата слева смотрите описание, для квадрата справа: МАГИЧЕСКАЯ_СИЛА преобразуется в _ГАИАЕССЧЯ_КИАЛМ

Открытый текст

Шифрованный текст

copyright © Исканцев Н.В., 2011

На главную
X