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 класс CaesarCipher
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
Добрый день!
Хотел бы продолжить обсуждение темы "Шифр Цезаря", начатую Aleri
в разделе "Вопросы новичков" и показать актуальныю версию класса CaesarCipher.
Предыдущая версия умела взламывать шифротекст двумя методами BruteForceDecoding и DecodingByCharacterFrequency.
Оба определяли ключи шифрования, дешифровывали шифротексты методом decode
и возвращали для выбора все найденные варианты взлома.
В новой версии в метод decode добавлено вычисление статитический рейтингов
дешифрованных текстов.
Теперь методы BruteForceDecoding и DecodingByCharacterFrequency
возвращают упрядоточенные по рейтингам варианты декодирования.
Это позволяет определять один наиболее достоверный вариант взлома шифротекста.
Для тестированиия добавлены частотный алвавиты - русский, английский,
немецкий и латинский, а также тестовые тексты на этих языках.
Постарюсь, сделать описание класса и выложу ссылку для скачивания.
Можете посмотреть демо версию здесь.
$alphabet_frequency:массив в котором keys - символы алфавта, values - частотность символа в %
$min_frequency: мин.частоность символов, значение применяется
для определения наиболее часто используемых символов. По умолчанию $min_frequency=3;
$inp_text: string техт, который требуется дешифровать
$MaxNumberDecoding: int, допутимое максимальной количество попыток дешифрования,
по-умолчанию, максимальное количество часто используемых символов алфавита.
"error" - int,
если не задан $inp_text, "error" => 1,
если в зашифрованном тексте все символы уникальные, "error" => 2,
, иначе "error" => 0 возвращает:
"MostFrequentlyCharacter" string, символ, который чаще других встречается, зашифрованном тесте.
"MostFrequentlyCharacterInd: int, порядковый номер этого символа в алфавите.
"keyRating" array, keys - int ключ шифрования, values - float, ретинг дешифрованного текста
"MaxRatingKey" int, ключ шифрования с максимальным рейтингом.
"MaxRating" float, максимальный рейтинг
"decodedKeys": array keys - int ключ шифрования, values - int, индекс попытки дешифрования.
"decoded": 2xD array: keys int, индекс попытки дешифрования
колонка 0: string, часто используемый символ алфавита, используемый для расчета ключа
колонка 1: int, порядковый номер этого символа в алфавите.
колонка 2: int, вычисленный ключ шифрования
колонка 3: string, дешифрованный текст
"rating", 2xD array, колонка 0: int ключ шифрования, колонка 1: float рейтинг
5. Метод GetCharacterFrequency
Предназначен для вычисления частотность уникальных символов заданного текста или алфавита.
Применяется в методе DecodingByCharacterFrequency и для получения $alphabet_frequency
см. выше создание экземпляра класса
$buf string|array строка или массив символов текста.
$inp_alphabet null|string|bool, если задана строка символов алфавита,
то вычислется частоность алфавита заданых символов,
если true, вычисляется частоность только тех символов алфавита,
которые будут найденны в исходном текста,
$decimals int|null число знаков после запятой в значениях частотности символов,
по умолчанию значение 2
$sort_col int|null если не задан или 2, сортировка результата по частности от большeй к меньшей,
если $sort_col=1, то сортировка по алфавиту.
если не задан исходный текст или текст задан, но в нём найдены только уникальные символы
$object:
"error" - int
если не задан $buf , "error" => 1,
если в зашифрованном тексте все символы уникальные, "error" => 2
если $inp_alphabet определён и найдены повторяющиеся символы
$object:
"error" - int 0,
"alphabet_frequency" - array, массив в котором keys - символы алфавита,
values - частотность символа в %
если $inp_alphabet не определён и найдены повторяющиеся символы
$object:
"error" - int 0,
"CharacterFrequency" - 2xD array: keys int, колонка 0: string символ, колонка 1: float частотность.
"MostFrequentlyCharacter" - string символ имеющий максимальное значение частотности.
"MostFrequentlyCharacterInd" - int порядковый номер этого символа в алфавите.
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
Интересно: применял ли кто-нибудь принцип шифра Цезаря и статистические методы для расшифровок античных письменностей.
Ведь по идее можно сопоставлять по фонетическому принципу какую-либо письменность и, например, английский алфавит, при определённых условиях, конечно же.
----- Март 2021. Бросил программирование
Vladimir Kheifets
Отправлено: 25 Февраля, 2021 - 21:50:35
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
dcc0 пишет:
Интересно: применял ли кто-нибудь принцип шифра Цезаря и статистические методы для расшифровок античных письменностей.
Ведь по идее можно сопоставлять по фонетическому принципу какую-либо письменность и, например, английский алфавит, при определённых условиях, конечно же.
Добрый день!
С помощью метода GetCharacterFrequency класса CaesarCipher
был проведён статистический анализ частей 1,2 "De Catilinae coniuratione" (конец 40-х годов до н.э.) с целью расчёта частотного алфавита латинского языка https://www.alto-booking.com/dem...terFrequency.php
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.