Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Шифр Цезаря на php (?¿) [2]
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
dcc0 пишет:
...Но есть интересный факт (можно сказать, противоречеие, почти), который отчасти объясняет ответ, полученный Вами от Google. "На какую букву больше всего слов в русском языке?". Ответ: "п". Весы качнулись в Вашу пользу.
P.S. Интересно с Цезарем: есть шанс найти достаточно большой текст без ошибок с первого раза на листке бумаге, если попадётся слово с двумя нн.
Думаю, что не столь важно какие символы окажутся в этой частотной выборке.
Попытаемся понять при каких условиях работоспособенный частотный алгоритм.
К счастью, погода сейчас нелётная и занимаемся мы не физикой элементарных частиц.
В том смысле, что нам не нужны синхрофазатроны для проверки гипотез.
Решил начать с начала. Сделал чистое шифрование и тестирую алгоритмы расшифровки.
Покажу результаты.
Покинул форум
Сообщений всего: 16
Дата рег-ции: Янв. 2021
Помог: 0 раз(а)
Vladimir Kheifets, здравствуйте, это просто прелесть, я и не думала, что такое возможно, ибо изначально было условлено, что расшифровка будет слегка кривая, но вы смогли реализовать всё это чудо, и, о боги, оно работает, спасибо ещё раз
Vladimir Kheifets
Отправлено: 10 Февраля, 2021 - 13:52:20
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
Добрый день, Aleri!
Изввините, меня, за накладки, которые Вы ещё заметите.
Теперь подчистил. См. PHP class CaesarCipher в zip-файле.
При вызове класса необходимо определить алфавит
в ассоциативном массиве кеу: символ, value: частотность символа в текстах.
Протестировал пока на текстах на русском языке.
еще одной интересной функцией программы является стеганография теганография это возможность прикрепления шифротекста в любой файл с сохранением его работоспособности подобно тому как революционеры писали письма молоком на полях книг так и здесь зашифрованный текст можно записать например в файл картинки никто не догадается что фотографии которыми вы обмениваетесь с вашим деловым партнером содержат секретную информацию
По ходу обсуждения алгоритма возник вопрос о его работоспособности на коротких текстах.
dcc0 пишет:
Код, получается, в расчёте только на большие строки слово "тфсфрфзфн" не получилось расшифровать.
Теперь могу ответить.
Во всех случаях, тесты должны шифроваться и расшифровываться на одном
и том же алфавите, напрример, пробел 0-символ, алфавит без буквы ё, как в задаче Aleri.
Метод BruteForceDecoding работет стабильно.
Метод DecodingByCharacterFrequency работет только с техтами с проявленим
частотности одного символа, например, "молоко"
и не работает в случаях, если все символы в тексте уникальны, например, "кот".
Это код тестевого скрипта.
$test_text[1]="еще одной интересной функцией программы является стеганография теганография это возможность прикрепления шифротекста в любой файл с сохранением его работоспособности подобно тому как революционеры писали письма молоком на полях книг так и здесь зашифрованный текст можно записать например в файл картинки никто не догадается что фотографии которыми вы обмениваетесь с вашим деловым партнером содержат секретную информацию";
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
Vladimir Kheifets Доброго!
Цитата:
. и не работает в случаях, если все символы в тексте уникальны, например, "кот".
Предположение: может быть, проблема с дешифрованием коротких слов решается добавлением лишних
символов к слову в начало, конец слова или, может быть, повторением самого слова.
P.S.
"суп из топора" нашёл, описанным ранее мной методом (сдвиг + поиск по словарю с дроблением слова). Картинку прикрепляю.
Интересно со словом "кот" и со словами из трёх букв в принципе; есть шанс найти прибавлением разных символов, но можно найти и ошибочный "корень".
Вот, что у меня получилось: шифрую слово "кот" ключом 9, получаю "учы".
Пробую расшифровать, повторив слово и добавив символы в начало и конец из него же "ччччччччччыучыучыыыыыыы". Расшифровываю указанным выше методом. Получаю результат с верным ключом: ссылка (загружается долго) Результат, конечно, условно удовлетворительный. Прикреплено изображение (Нажмите для увеличения)
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
dcc0 пишет:
[Предположение: может быть, проблема с дешифрованием коротких слов решается добавлением лишних
символов к слову в начало, конец слова или, может быть, повторением самого слова.
P.S.
"суп из топора" нашёл, описанным ранее мной методом (сдвиг + поиск по словарю с дроблением слова). Картинку прикрепляю.
Интересно со словом "кот" и со словами из трёх букв в принципе; есть шанс найти прибавлением разных символов, но можно найти и ошибочный "корень".
Вот, что у меня получилось: шифрую слово "кот" ключом 9, получаю "учы".
Пробую расшифровать, повторив слово и добавив символы в начало и конец из него же "ччччччччччыучыучыыыыыыы". Расшифровываю указанным выше методом. Получаю результат с верным ключом: ссылка (загружается долго) Результат, конечно, условно удовлетворительный.
По поводу добавления разных символов к коротким словам.
Есть хорошая поговорка: "Знал бы, где упасть, солому подстелил".
Чтобы сработал метод DecodingByCharacterFrequency нужно поднять частность
только одного символа, который даст возможность вычислить верный ключ шифрования.
Можно конечно перебирать все символы шифротекта с каждым из часто употребимым символом языка,
но при этом возрастёт количество переборов и их может оказаться больше чем при методе BruteForceDecoding.
Метод BruteForceDecoding успешно расшифровавывает короткие слова и работает быстро.
Теперь про слоги, корни и болле глубокий ленгвистиский анализ.
Заманчиво, но думаю, что в связи с шифром Цезаря это нецелесообразно.
Уже давно всем стало понятно, что он легко и быстро взламывается.
p.s для тестирования класса CaesarCipher добавил английский и немецкий частотные алфавиты
going to the supermarket martha is at the grocery store getting ready for a house party she has a list of what she needs with her as she goes along the first section she comes has produce martha sees apples bananas cherries grapes and strawberries
urlaub in den bergen herr und frau meyer fahren oft in die berge berge gibt es in deutschland, österreich, italien und der schweiz ihr reiseziel ist in diesem jahr die schweiz dort kann man viel wandern in einem berghotel haben sie ein zimmer gebucht
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.