Как стать автором
Обновить
0
0
Чистобаев Андрей @chistobaevAndrey

Пользователь

Отправить сообщение
Спасибо за напутствие!

Насчёт второго теста сразу скажу вам, что текст изменится мало, так как каждый символ шифруется отдельно. Но это не проблема, можно разбирать по битам сразу всю исходную строку.
Так же проводил криптоанализ на основе открытого текста и шифротекста. При посимвольном шифровании ключ подбирался за 1 секунду, что не радует.
Так же рассчитываю перейти к использованию обратимых клеточных автоматов. Но и на данный момент в алгоритме имеются подобные ключи. Их список имеется в тесте 2 в репозитории. Советую подробнее рассмотреть ключ 204.
Если лень
При использовании ключа 204 шифротекст остаётся равным открытому тексту. Зато без коллизий «шифрует»)
1) Похоже, что поддерживается только UTF-16 и то не точно, ведь тип unsigned char, который я использовал может иметь размер более 2 байтов (но не менее). Тогда стоит представлять символ в виде char*. Спасибо.

2) Показанные вами повторения очень часто встречаются в данном алгоритме, но из-за использования элементарных клеточных автоматов избавиться от них полностью не удастся, можно лишь подобрать номер правила перехода, когда количество совпадений будет минимальным. Поэтому, чтобы избавиться от этих ограничений, я решил использовать обратимые бинарные одномерные клеточные автоматы. Попытаюсь произвести замену так скоро, как только смогу.
1) Какой тип в используете для хранения UTF-8 символа?

2) Я лично просчитал эволюцию клеточного автомата для одного из входных символов на бумаге. Потом вбил свои данные в программу и получил такой же результат.

А так же элементарные клеточные автоматы, которые на данный момент используются, необратимы. Из этого ясно, что без словаря расшифровать шифротекст не получится.
Дело в том, что с таким их использованием я не был знаком раньше и решил поэкспериментировать.
Насчёт необратимости знаю, но и такие алгоритмы используются.
И в вопросе о коллизиях вы правы, можно даже подсчитать, в каком правиле они реже встречаются. То есть простор для экспериментов огромный, многое можно проверить и выбрать оптимальный вариант.

Вам тоже спасибо за интерес)
Написал один комментарий, потом другой и втянулся…
Каюсь за моё невежество относительно основных терминов криптографии. Завтра перепишу текст.
Добавил немного строк о быстродействии.
Программа находится на стадии активной разработки, поэтому описание может не совпадать с действительностью. Например, было удалено кидание исключений в классе Rule.

Прошу отнестись с пониманием.
Добавил немного строк о быстродействии!
image
Расширения добавлены!
image

Проверку добавлю, как и расширения. Извиняюсь за неудобства, ведь я не подумал о подсветке синтаксиса. Спасибо.

Я давал ссылку на github и думал, что люди протестят сами, если заинтересуются. Понял, что был не прав, в скором времени дополню публикацию небольшими тестами)

И вам спасибо за комментарий!
Оператор [] класса Rule вызывается в операторе () класса Field. Можете посмотреть реализацию по ссылке, ведь это и есть моя работа, которую я кратко описал в публикации. Но всё же объясню, как смогу.

Правило перехода состояний я реализовал в виде класса Rule. В его конструктор (прошу заметить, что не explicit) передаётся целое число от 0 до 255 включительно. В двоичных разрядах этого числа хранится информация о том, как изменится в следующем поколении клетка посередине при некотором случае окрестности (погуглите про Код Вольфрама, возможно и я ошибаюсь). Вот число разбивается на двоичные разряды, которые записываются во внутренний вектор класса. При этом каждый экземпляр класса Field включает свой экземпляр класса Rule, имеющий определение оператора []. Этот оператор используется в операторе () класса Field, в котором просчитывается следующее поколение клеточного автомата. При этом ему передаётся окрестность клетки, преобразованная в десятичное число. Вот так примерно Rule и используется.

Но только после написания комментария я осознал, что, возможно, нет необходимости в классе Rule. Можно заменить его ещё одним вектором в классе Field, а вышеописанные преобразования числа выполнять в конструкторе Field. Это ещё раз говорит о том, что реализация находится на стадии разработки и требует некоторых изменений и дополнений. Но она имеет право на существование, так как других попыток реализации я не нашёл. Возможно, у вас получится намного лучше, это лишь пример и его краткое описание. Хотя могли бы и почитать код, там лишь 60 строк. Ещё раз спасибо)
Спасибо за критику!
Убрал расширения, потому что подумал, что так удобнее.
Описание классов есть описание моей реализации. Другую реализацию после длительных поисков в интернете я так и не нашёл, поэтому сравнивать мне не с чем. Можно протестить программу и сравнить с другими алгоритмами.
Не откажусь от вашей помощи.
И всё равно найдусь я, у которого будет лагать. От этого никуда не денешься.

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность