Мысли Перед Сном: Алгоритм Фрактальной Перетасовки

Недавно впервые в этом сезоне ночевал на даче и не мог уснуть из-за непривычной обстановки.

И тогда мой мозг начал думать о шифровании XOR. Это довольно просто, но я подумал, как можно это улучшить.

К сожалению, вместо того, чтобы сладко уснуть, мне пришла в голову мысль, что нужно каким-то образом перетасовать исходные данные.

И тут мне в голову пришла идея фрактального смешивания (из-за которой я уснул после четырех утра).

Суть алгоритма такова: берётся вектор исходных данных и делится на N равных частей (если вектор не делится на N, то «хвост» просто остаётся справа, хотя может быть и справа).

левый).

N частей смешиваются в соответствии с некоторым вектором перетасовки m[N] (который затем передается получателю в качестве ключа, если этот алгоритм используется для шифрования).

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

Затем это происходит снова и снова, пока это не становится возможным.

Примечательно то, что этот алгоритм легко реализовать с помощью рекурсии, но его также можно реализовать итеративно.

Кроме того, алгоритм смешивания симметричен, то есть для получения исходного вектора данных его необходимо применить еще раз с тем же вектором m[N].

Когда я это придумал, то сразу назвал его фракталом, поскольку смешивание происходит внутри смешивания (а слово «фрактал» — это круто).

Я тоже сразу начал искать его в Гугле (благо на даче работает мобильный интернет).

Но я его не нашел! Тогда в моих глазах загорелся огонек волнения – неужели я придумал что-то новое и простое? После таких мыслей я долго не мог заснуть — но я уже думал не столько об алгоритме микширования, сколько о том, как напишу статью на Хабре.

Через неделю, уже находясь дома, я поборол свою лень и написал на C++ код, который перетасовывает заданную строку по моему алгоритму, используя заданное число N. Для простоты я использовал вектор, переставляющий данные в обратном порядке.

Но, конечно, алгоритм рассчитан на произвольный вектор смешивания.



код С++

Примечание.

В основном метод называется перемешатьСтрока , советую начать смотреть код оттуда.

   

class FractalShuffle { private:

Теги: #Алгоритмы #перетасовка #ночь #шифрование #Алгоритмы
Вместе с данным постом часто просматривают: