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
Форумы портала PHP.SU :: Версия для печати :: Шифр Цезаря на php (?¿)
Форумы портала PHP.SU » » Вопросы новичков » Шифр Цезаря на php (?¿)

Страниц (2): [1] 2 »
 

1. Aleri - 06 Февраля, 2021 - 01:05:45 - перейти к сообщению
Хех, здравствуйте, я снова здесь и проблемы реализации размером со знатный такой вагон и маленькую тележку, разумеется, тоже со мной.

Мне необходимо осуществить программный взлом шифра Цезаря Растерялся

Ориентировочный алгоритм (постановка задачи):
    1. Определить частоты символов алфавита. Занести их в массив FiA.

    2. Определить частоты символов шифротекста. Занести их в массив FiC:
    а) вычислить сколько раз случается тот или иной символ в шифротексте (занести в массив freq)
    б) определить количество символов в шифротексте (l)
    в) нормировать частоты символов, вычисленные в пункте 2 (a), результат поместить в массив FiC, то есть FiC[i]=freq[i]/l.

    3. Найти такое значение k, при котором сумма одноименных разниц d была бы минимальной:
    а) вычислить для всех значений k=0,1, ..., 26 суммы разниц

    d=∑_(j=0)^26|FiA[j]-FiC[m]|, где m= (j-k+27) mod27

    б) найти минимальную сумму разниц d;
    в) запомнить значение k.

    4. Расшифровать шифротекст, используя ключ k.


Но алгоритм выше, можно применять к текстам только английского языка. Это объясняется тем, что процесс анализа шифротекста выполнялся по модулю 27 (26 букв латинского алфавита и пробел). В случае анализа шифров других языков необходимо изменить в зависимости от количества букв в алфавите рассматриваемого значения модуля, по которому ведется анализ (русский)

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

Дайте обратную связь, если у вас есть хоть какое-то понимание происходящего Меланхолия
2. Vladimir Kheifets - 06 Февраля, 2021 - 16:03:18 - перейти к сообщению
Aleri пишет:
Мне необходимо осуществить программный взлом шифра Цезаря Растерялся
Дайте обратную связь, если у вас есть хоть какое-то понимание происходящего Меланхолия
Добрый день!
Вы приложили Ворд документ.
В таблице2 потерян символ "ь" м.б ещё что-то неверно.
Вероятно и в самом тексте для расшифровки тоже есть ошибки, потому, что результат получается странный
Цитата:
е одной интересной функцией программ влетс стеганографи теганографи то возможност прикреплени ифротекста в лбой файл с сохранением его работоспособности одобно тому как револционер писали писма молоком на полх книг так и здес заифрованнй текст можно записат например в файл картинки никто не догадаетс то фотографии которми в обмениваетес с ваим деловм партнером содержат секретну информаци

Массивы сделал, но для поиска ключа не использовал.
Результат получен перебором. Ключь шифрования -9
Спойлер (Отобразить)
Когда разберётесь с данными, приложите их,пожалуйста, в .тхт файле.
Удачи!
3. Aleri - 06 Февраля, 2021 - 18:11:43 - перейти к сообщению
Vladimir Kheifets пишет:
Aleri пишет:
Мне необходимо осуществить программный взлом шифра Цезаря Растерялся
Дайте обратную связь, если у вас есть хоть какое-то понимание происходящего Меланхолия
Добрый день!
Вы приложили Ворд документ.
В таблице2 потерян символ "ь" м.б ещё что-то неверно.
Вероятно и в самом тексте для расшифровки тоже есть ошибки, потому, что результат получается странный
Цитата:
е одной интересной функцией программ влетс стеганографи теганографи то возможност прикреплени ифротекста в лбой файл с сохранением его работоспособности одобно тому как револционер писали писма молоком на полх книг так и здес заифрованнй текст можно записат например в файл картинки никто не догадаетс то фотографии которми в обмениваетес с ваим деловм партнером содержат секретну информаци

Массивы сделал, но для поиска ключа не использовал.
Результат получен перебором. Ключь шифрования -9
Спойлер (Отобразить)
Когда разберётесь с данными, приложите их,пожалуйста, в .тхт файле.
Удачи!

Я вам безумно благодарна, спасибо, что так заморочились и реализовали всё это Прыгаю до потолка
А насчёт ошибок, то уже пробелы в самом исходнике который нам выдал преподаватель, мол главное, чтобы была хоть какая-то читабельность, ибо относительно русского алфавита данный метод работает слегка кривовато Хи
4. dcc0 - 07 Февраля, 2021 - 00:38:41 - перейти к сообщению
Интересно. Если зашифровано одно слово, то его можно поискать в словаре и выделить жирным при выводе (как я понял, - необязательно прибегать к исследованию частот символов в строке, хотя, наверное, так красивее).
Интересно стало. Правильно ли мыслю?!

Алфавит в массиве дублировал для упрощения.

Спойлер (Отобразить)

5. Vladimir Kheifets - 07 Февраля, 2021 - 08:34:12 - перейти к сообщению
dcc0 пишет:
Интересно стало. Правильно ли мыслю?!
Спойлер (Отобразить)

Добрый день!
"Шифр Цезаря — это вид шифра подстановки, в котором каждый символ
в открытом тексте заменяется символом, находящимся на некотором
постоянном числе позиций левее или правее от него в алфавите." См. здесь:
https://en[dot]wikipedia[dot]org/wiki/Caesar_cipher

В Ваше коде Вы сделали только положительный сдвиг, а должен быть и отрицательный.
6. dcc0 - 07 Февраля, 2021 - 11:10:00 - перейти к сообщению
Как я понял, - это вопрос нумерации ключа.

По идее: если повторить код, перевернув массив, то получится нужная нумерация для отрицательного сдвига.

Я сориентировался вот на этот калькулятор:
https://planetcalc[dot]ru/1434/
(Добавление)
Vladimir Kheifets,Aleri, спасибо. Интересная задачка.
7. dcc0 - 07 Февраля, 2021 - 15:45:26 - перейти к сообщению
У меня получилось добавить немного эвристики для поиска по словарю существительных.
Точность указания ключа я не стал трогать - назовём это смещением.

Будем считать, что средняя длина корня русского слова = 4 буквам.
Тогда строку можно разделять в цикле по 4 символа, удаляя с каждым проходом первый
и искать только слова с корнем минимум из 4 букв. Такой подход позволяет отсеять "мусор" - ошибочные симолы или "шум", если использовать специальные термины.

Следовательно, получается, можно взять любой фрагмент строки и попытаться найти смещение перебором с поиском по словарю. Однако, при таком подходе возможны совпадения, т.е. неверные результаты (но, думаю, редко).

Можно протестировать. Фрагмент строки взял этот: чычмщйэссиучычщгхси
Результат удовлетворительный. Найдены возможные смещения: 9, 22, 24.
24 и есть верный результат.
Протестировать можно тут: http://comb[dot]org[dot]ru/z_heuristic.php

Спойлер (Отобразить)
8. Vladimir Kheifets - 07 Февраля, 2021 - 18:15:10 - перейти к сообщению
Добрый день, Aleri!
Я убрал Вашу таблицу частотности символов алфавита.
Кажется, она не совсем достоверна.
Вместо неё добавил массив часто встечающихся в русских текстах символов
и написал взлом шифра с частоным алгоритмом.
Спойлер (Отобразить)
Удачи!
9. dcc0 - 07 Февраля, 2021 - 19:32:35 - перейти к сообщению
Vladimir Kheifets,
Я где-то недавно читал, что в русских текстах чаще встречается буква "а", потом только "о".
Цитата:
тфсфрфзфн


Код, получается, в расчёте только на большие строки слово "тфсфрфзфн" не получилось расшифровать.
10. Aleri - 07 Февраля, 2021 - 22:08:03 - перейти к сообщению
dcc0 пишет:
У меня получилось добавить немного эвристики для поиска по словарю существительных.
Точность указания ключа я не стал трогать - назовём это смещением.

Будем считать, что средняя длина корня русского слова = 4 буквам.
Тогда строку можно разделять в цикле по 4 символа, удаляя с каждым проходом первый
и искать только слова с корнем минимум из 4 букв. Такой подход позволяет отсеять "мусор" - ошибочные симолы или "шум", если использовать специальные термины.

Следовательно, получается, можно взять любой фрагмент строки и попытаться найти смещение перебором с поиском по словарю. Однако, при таком подходе возможны совпадения, т.е. неверные результаты (но, думаю, редко).

Можно протестировать. Фрагмент строки взял этот: чычмщйэссиучычщгхси
Результат удовлетворительный. Найдены возможные смещения: 9, 22, 24.
24 и есть верный результат.
Протестировать можно тут: http://comb[dot]org[dot]ru/z_heuristic.php

Спойлер (Отобразить)


Это чертовски интересно, благодарю вас Радость

А ссылка на тестирование это ваше творение?
11. Vladimir Kheifets - 07 Февраля, 2021 - 22:15:09 - перейти к сообщению
dcc0 пишет:
Vladimir Kheifets,
Я где-то недавно читал, что в русских текстах чаще встречается буква "а", потом только "о".
Цитата:
тфсфрфзфн

Код, получается, в расчёте только на большие строки слово "тфсфрфзфн" не получилось расшифровать.

google по запросу "частота букв в русском языке" выдаёт: о п р с
https://www[dot]google[dot]com/search?cl[dot][dot][dot]1%8B%D0%BA%D0%B5
слово "тфсфрфзфн" не пробовал расшифрововать
12. Aleri - 07 Февраля, 2021 - 22:34:05 - перейти к сообщению
Vladimir Kheifets пишет:
Добрый день, Aleri!
Я убрал Вашу таблицу частотности символов алфавита.
Кажется, она не совсем достоверна.
Вместо неё добавил массив часто встечающихся в русских текстах символов
и написал взлом шифра с частоным алгоритмом.
Спойлер (Отобразить)
Удачи!


Здравствуйте!

Я вам очень признательна и согласна, что достоверность таблицы оставляет желать лучшего, но это главный фетиш задания Хи

Спасибо вам ещё раз Прыгаю до потолка
13. dcc0 - 07 Февраля, 2021 - 22:39:31 - перейти к сообщению
Vladimir Kheifets,
Доброго вечера!

Да. Я не прав. Неправильно запомнил.
Но вроде бы так по частотности: о, е, а

https://ru[dot]m[dot]wikipedia[dot]org/wiki/Частотность
Данные отсюда.

P.s. даже без знаний о частотности, думаю, на первых местах гласные.


Цитата:
А ссылка на тестирование это ваше творение?

Aleri
Да Художник
14. Vladimir Kheifets - 08 Февраля, 2021 - 11:12:05 - перейти к сообщению
dcc0 пишет:
Vladimir Kheifets,
Доброго вечера!Да. Я не прав. Неправильно запомнил.
Но вроде бы так по частотности: о, е, а

Добрый день!
Ради интереса взял на с wiki таблицу
"Статистика частотности букв русского языка (на материале НКРЯ)"
Расчитал частота букв в русском языке (частотность>5%)
Спойлер (Отобразить)
Результат
Цитата:
Array
(
[0] => о
[1] => е
[2] => а
[3] => и
[4] => н
[5] => т
[6] => с
)

Если предположить, что этот источник болле достоверный, то Вы были правы,
а google ошибается. Кому пожаловаться?

(Добавление)
Aleri,
замените, пожалуйста, в последнем варианте скрипта
PHP:
скопировать код в буфер обмена
  1. //эти символы наиболле часто встречаются в текстах на русском языке.
  2. $most_frequently_used = ["о", "е", "а", "и", "н", "т", "с"];

В шифротексте был потерян первый символ "о" и "ш" в середине д.б. так
Спойлер (Отобразить)

необходимо добавить проверку на отрицательный индекс массива $alphabet
Спойлер (Отобразить)
После всех этих мучений получите чистую расшифровку

Цитата:
еще одной интересной функцией программы является стеганография теганография это возможность прикрепления шифротекста в любой файл с сохранением его работоспособности подобно тому как революционеры писали письма молоком на полях книг так и здесь зашифрованный текст можно записать например в файл картинки никто не догадается что фотографии которыми вы обмениваетесь с вашим деловым партнером содержат секретную информацию
Удачи!
15. dcc0 - 08 Февраля, 2021 - 12:34:37 - перейти к сообщению
Vladimir Kheifets, доброго дня!
Думаю, что ситуация с этим такая:
google анализирует тексты из интернета. Помимо классических текстов - это могут быть: запросы, комментарии, строчки из метаданных и т.д.
В связи с этим предполагаю, что и результат отличный.
Данные НКРЯ - это, скорее всего, данные на основе анализа литературных, научных
текстов. В случае с НКРЯ перевес на стороне классических русских текстов,
я бы сказал, - нормальных текстов. Образно выражаясь, google жуёт вершки, а статистика НКРЯ - это корешки.


Но есть интересный факт (можно сказать, противоречие, почти), который отчасти объясняет ответ, полученный Вами от Google. "На какую букву больше всего слов в русском языке?". Ответ: "п". Весы качнулись в Вашу пользу.

P.S. Интересно с Цезарем: есть шанс найти достаточно большой текст без ошибок с первого раза на листке бумаге, если попадётся слово с двумя нн.

 

Powered by ExBB FM 1.0 RC1