Недавно впервые в этом сезоне ночевал на даче и не мог уснуть из-за непривычной обстановки.
И тогда мой мозг начал думать о шифровании XOR. Это довольно просто, но я подумал, как можно это улучшить.
К сожалению, вместо того, чтобы сладко уснуть, мне пришла в голову мысль, что нужно каким-то образом перетасовать исходные данные.
И тут мне в голову пришла идея фрактального смешивания (из-за которой я уснул после четырех утра).
Суть алгоритма такова: берётся вектор исходных данных и делится на N равных частей (если вектор не делится на N, то «хвост» просто остаётся справа, хотя может быть и справа).
левый).
N частей смешиваются в соответствии с некоторым вектором перетасовки m[N] (который затем передается получателю в качестве ключа, если этот алгоритм используется для шифрования).
После смешивания каждая часть исходного вектора делится таким же образом на N равных частей, и внутри каждой части производится аналогичное смешивание.
Затем это происходит снова и снова, пока это не становится возможным.
Примечательно то, что этот алгоритм легко реализовать с помощью рекурсии, но его также можно реализовать итеративно.
Кроме того, алгоритм смешивания симметричен, то есть для получения исходного вектора данных его необходимо применить еще раз с тем же вектором m[N].
Когда я это придумал, то сразу назвал его фракталом, поскольку смешивание происходит внутри смешивания (а слово «фрактал» — это круто).
Я тоже сразу начал искать его в Гугле (благо на даче работает мобильный интернет).
Но я его не нашел! Тогда в моих глазах загорелся огонек волнения – неужели я придумал что-то новое и простое? После таких мыслей я долго не мог заснуть — но я уже думал не столько об алгоритме микширования, сколько о том, как напишу статью на Хабре.
Через неделю, уже находясь дома, я поборол свою лень и написал на C++ код, который перетасовывает заданную строку по моему алгоритму, используя заданное число N. Для простоты я использовал вектор, переставляющий данные в обратном порядке.
Но, конечно, алгоритм рассчитан на произвольный вектор смешивания.
код С++
Примечание.В основном метод называется перемешатьСтрока , советую начать смотреть код оттуда.
Теги: #Алгоритмы #перетасовка #ночь #шифрование #Алгоритмыclass FractalShuffle { private:
-
12 Миллионов Долларов За Одно Поле Формы
19 Oct, 24