По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Полиалфавитный шифр – это криптосистема, в которой используется несколько моноалфавитных шифров. Поэтому нам необходимо иметь как минимум 2 таблицы и шифрование текста происходит следующим образом. Первый символ шифруется с помощью первой таблицы, второй символ – с помощью второй таблицы и так далее. Сильные стороны полиалфавитных шифров заключается в том, что атака по маске и атака частотным криптоанализом здесь не работает, потому что в таких шифрах две разные буквы могут быть зашифрованы одним и тем же символом. Моноалфавитные шифры были популярны вплоть до конца 16 века, так как практически все научились их вскрывать. Необходимо было что-то менять и поэтому в 1585 году был создан шифр Виженера. С этого началась новая эпоха в истории криптографии, которая называется период полиалфавитных шифров, хотя попытки создать подобные криптосистемы были и раньше за пол века до этого, но ничего серьёзного из этого не получилось. Шифр Гронсфельда Данный шифр представляет собой модификацию шифра Цезаря и по своей структуре похож на шифр Виженера. Принцип работы. Берём к примеру текст «РАБОТА» и ключ, например - «136». Ключ в данном случае не одно число, а набор цифр, для понимания можно представить в виде «1,3,6» и не важно какой длины. Далее каждой букве исходного текста присваиваем по 1 цифре ключа, например «Р(1) А(3) Б(6) О(1) Т(3) А(6)» и каждому символу исходного текста прибавляем значение ключа по методу Цезаря. Получается зашифрованный текст «СГЖПХЁ». При расшифровании проделываем ту же логику, как при расшифровании по методу Цезаря. Шифр Виженера Шифр Виженера является самым популярным полиалфавитным шифров за всю историю. Для начала создаётся квадрат Виженера. Ключом в данном методе может быть любой длины и состоять из любых символов, которые есть в таблице 3. Например возьмём ключ «ШИНА» и исходный текст «РАБОТА». Проделываем то же самое, что и при шифре Гронсфельда, к каждой букве исходного текста записываем исходную букву ключа – «Р(Ш) А(И) Б(Н) О(А) Т(Ш) А(И)». Согласно таблице 3 по диагонали находим букву исходного текста, а по вертикали находим букву ключа, их пересечение является зашифрованной буквой, таким образом проделываем для всех букв и шифруем текст, получается «СЙППКЙ». Чтобы расшифровать нам нужно точно так же под каждой буквой закрытого текста записываем букву ключа - «С(Ш) Й(И) П(Н) П(А) К(Ш) Й(И)». По вертикали находим букву ключа и по этой строке находим зашифрованную букву, пересечение с буквой по горизонтальной строки – буква исходного текста, расшифровывает и получаем исходный текст. Атака методом индекса совпадений В данном случае рассмотрим криптоанализ шифра Виженера, его так же можно применять и к шифру Гронсфельда. Нижеприведённый метод криптоанализа называется методом индекса совпадений. Атака методом индекса совпадений состоит из 2 шагов: Определяет длину ключевого слова Дешифрование текста Рассмотрим каждый из этапов: 1. Для того, чтобы найти длину ключа воспользуемся методом индекса совпадений. ИС = 0,0553 Индекс совпадений – это константа, вероятность того, что две наугад выбранные буквы в нормальном осмысленном произвольном русском тексте будут одинаковые.То есть вероятность, что две наугад выбранные буквы будут одинаковые, равна 5,53%. При атаке на шифротекст необходимо ориентироваться именно на эту вероятность. Если имеет шифротекст, зная о нём только то, что он зашифрован шифром Виженера, определяем длину ключа. В шифре Виженера ключом выступает любая последовательность цифр, начиная с 2, потому что если была бы 1 буква, то это просто шифр Цезаря. Итак, начиная с минимума, предполагаем, что длина ключа составляет 2 символа и проверяем это. Выбираем из шифротекста каждую вторую букву, начиная с первой и выписываем отдельно полученную строку. Предполагаемую длину ключа обозначаем k=2, а количество символов в этой строке за L. Далее из алфавита берём каждую букву и считаем для неё индекс совпадений, то есть берём определённую букву и подсчитываем сколько раз она встретилась в этой строке шифротекста (это число обозначаем – n), и так для всех букв. Далее высчитываем индекс совпадений по формуле ИС = n(n-1)/L(L-1) Далее высчитываем индекс совпадений для всего текста путем сложения всех индексов совпадений для всех букв отдельно. Получаем определённое значение и сравниваем его со значением константы. Если индекс совпадений очень близко к константе или больше, то это означает, что подобрана верная длина ключа. Если значение индекса намного отличается от константы, то значит подобранная длина ключа неверная и необходимо взять длину ключа 3 и выбирать из шифротекста каждую третью букву, начиная с первой и выполнять те же действия. Если индекс снова намного отличается от константы берем следующие значения ключа и выполняет те же действия, до тех пор, пока индекс совпадений будет очень близок к константе. 2. Вычислив длину ключевого слова возвращаемся к шифротексту. Разбиваем текст на количество символов символов в ключе, например, при длине ключа k=3, делим текст на 3 части. В первую часть будет входить каждая третья буква, начиная с первой, во вторую часть – каждая третья буква, начиная со второй, и третья часть – каждая третья буква, начиная с третьей. После этого выписываем отдельно каждую часть. Отдельная часть представляет собой обычный шифр Цезаря. Далее дешифруем каждую часть методом частотного криптоанализа. Находим самую частую букву каждой части шифротекста, сравниваем её с буквой «О», так как она в русском алфавите самая частая и сравниваем шифрованную букву с буквой «О». Вычисляем разницу позиций между ними – в ответе получим число, равное ключу и дешифруем с помощью него по шифру Цезаря первую часть шифротекста. Такие же действия проделываем и для остальных частей, затем восстанавливаем части дешифрованного шифротекста и получаем исходный текст. Автокорреляционный метод Данный метод проще в реализации, чем метод индекса совпадений, но последовательность действий точно такая: Определение ключа Дешифрование текста Имея шифротекст, необходимо посчитать количество букв в нём. Желательно весь шифротекст записать в одну строку, затем сделать копию и разместить под ней же. Как и в случае с методом индекса совпадением предполагаем для начала минимальную длину ключа, то есть k=2. Затем в копии строки шифротекста убираем первые два символа и дописываем их в конец строки. Далее ищем количество совпадающих букв между этими двумя строками и находим долю количества совпадений от общего количества символов в тексте по формуле: Y = n/L Y - Доля количества совпадений n – количество совпадений L – количество символов в шифротексте Полученное значение сравниваем со значением контанты индекса совпадений, так же – если это значение намного отличается, предполагаем длину ключа k=3 и делаем ту же процедуру до тех пор, пока доля количества совпадений будет близка к константе индекса совпадений. После нахождения длины ключа проделываем то же самое, что и в методе индекса совпадений и дешифруем текст. Шифр Тритемиуса Шифр Тритемиуса позиционируется усиленным шифром Цезаря и описывается формулой: C = (m+s(p))modN C - номер зашифрованного символа в алфавите m - номер символа открытого текста в алфавите n - количество символов в алфавите s(p) - это ключ, который представляет собой математическую функцию, например: s(p) = 2p+const p - порядковый номер символа в исходном тексте const - любое число, которое задаётся в ручную Точно так же, как в шифре Цезаря каждый символ, перед тем, как шифровать, будет переводится в число, согласно определённой таблице. Первое, что нужно сделать – пронумеровать все символы в исходном тексте, то есть каждый символ получается свой номер в зависимости от своей позиции в тексте. Шифрование происходит посимвольно. Расшифрование происходит похожим способом и описывается формулой: C = (m-s(p))modN Шифр для своего времени очень неплох, потому что не смотря на свою простоту, то есть самая сложная часть – это выбрать функцию s(p). Он демонстрирует достаточно высокий криптоустойчивости, то есть не уступает ни шифру Виженера, ни шифру Гросфельда. Книжный шифр Книжный шифр – не является популярным шифром среди старых шифров, но при грамотном подходе к использованию, обеспечивает криптостойкость на порядки выше, чем шифр Виженера и Гронсфельда. Это симметричный шифр, в котором в качестве ключа используется любая книга на выбор, и процесс шифрования происходит посимвольно. Выбираем первый символ исходного текста и находим его в нашей книге (с любого места). И в качестве зашифрованного символа используем комбинацию из 3 цифр (номер страницы, номер строки, номер символа в строке) и проделываем тоже самое с остальными символами исходного текста. При этом для повышения безопасности при повторении символа в исходном тексте выбирать для него другую комбинацию в книге, чтобы зашифрованные комбинации не повторялись. Чтобы получатель смог расшифровать полученное сообщение должен обладать точно такой же книгой. Поочередно смотрит комбинацию и находит её в данной книге и расшифровывает полученное сообщение. Недостаток этого шифра – это непрактичность и трудоёмкость при шифровании и расшифровании.
img
Представьте ситуацию, пользователи пытаются получить доступ к вашему сайту, но он не открывается. Знаете в чём дело? Возможно, есть ошибки, которые не были выявлены и решены раньше. Разочарованные пользователи покидают ваш сайт, а вы теряете лояльных пользователей. Как решить эту проблему? Как узнать о состоянии сайта раньше пользователей? Существует два возможных способа - eсли вы не против потратить немного денег, то можно обратиться к таким мониторинговым решениям, как StartCake и т.п. Однако если вы разработчик или не готовы тратиться ежемесячно, можете воспользоваться преимуществами API Geekflare - Site Up? Данный API проверяет доступность сайта из разных точек. В данном материале рассмотрим Python код, который немедленно уведомит вас через Gmail, как только сайт станет недоступен. Начнем с изучения API «Is Site Up?» API Is Site Up? Перед началом работы с API необходимо установить пакет requests, который в Python используется для работы с API. Но не обязательно использовать Python. Можно использовать любой другой язык. В любом случае, убедитесь, что настроили все необходимое, чтобы сделать API запрос. Итак, для тех, кто использует Python, установите пакет запросов с помощью команды: pip install requests Выполните настройку для других языков (если выбран другой язык, кроме Python) и переходите к следующим шагам. Теперь перейдите на страницу API Geekflare. Вы можете найти различные типы API, включая «Is Site Up?». Для использования API Geekflare нам нужен ключ API, который мы можем получить через RapidAPI. Нажмите на кнопку GET API KEY, чтобы перейти к RapidAPI. RapidAPI откроется в новой вкладке и выглядит следующим образом: Чтобы получить ключ API нужно создать учетную запись. Создайте учетную запись в RapidAPI, если у вас ее нет. Затем в верхней части всех доступных API Geekflare вы увидите API «Is Site Up?», который мы ищем. Если он не активен, найдите его с помощью поиска и нажмите на него. После этого в правой стороне должно отобразиться руководство по данному API. Из раздела Code Snippets в правой части выберите Python -> Requests. Или же если вы не используете Python, выберите другой язык с соответствующим пакетом. Вы получите код для вызова API «Is Site Up?». Давайте изменим его немного, чтобы потом легче было добавлять код. Посмотрите на измененный код в Python. import requests API_URL = "https://geekflare.p.rapidapi.com/up" def make_api_request(): headers = { 'content-type': "application/json", 'x-rapidapi-host': "geekflare.p.rapidapi.com", 'x-rapidapi-key': "YOUR_API_KEY" } payload = r'{"url": "https://www.geekflare.com"}' response = requests.request("POST", API_URL, data=payload, headers=headers) return response.json() if __name__ == '__main__': data = make_api_request() print(data) Замените API_KEY своим собственным ключом API из RapidAPI в приведенном выше коде. Он будет разным для каждого пользователя. Вы найдете его в RapidAPI в разделе Параметры заголовка: Тот же ключ API вы сможете найти в примере кода, как показано ниже. Несколько расположений В приведенном выше коде сайт проверяется из одного датацентра (Нью-Йорк, США). Но мы можем посылать запросы на сайт из разных мест с указав буквенные коды стран в теле запроса. Другие доступные места - Англия (Лондон) и Сингапур. Мы можем передать данные местоположения вместе с URL-адресом сайта следующим образом: { "locations": [ "uk", "us", "sg" ], "url": "geekflare.com" } Вы можете передать предпочитаемые расположения из списка. Мы написали код, чтобы сделать запрос API, который получает данные независимо от того, работает сайт или нет. Пришло время написать еще код, который отправляет почту, когда сайт не работает. Получение уведомления на почту В сети можно найти немало руководств о том, как отправлять электронные письма через Gmail в Python или же использовать следующий код, который использует пакет под названием yagmail специально разработан для отправки почты из Gmail. Перед отправкой сообщения через учетную запись Gmail необходимо включить параметр Разрешить небезопасные приложения. Вы можете включить его здесь. Посмотрим код: def send_mail(): gmail = yagmail.SMTP("gmail", "password") receiver = "receiver@domain.com" subject = "Testing Subject" body = "This is a testing mail" gmail.send( to=receiver, subject=subject, contents=body, ) Полное руководство по yagmail можно найти здесь. Теперь у нас есть код для запросов API и отправки почты. Следующим шагом является вызов send_mail всякий раз, когда в ответе на запрос сайт указывается как недостпный. Итак, откуда мы знаем, что наш сайт не работает или работает? Когда мы посылаем запрос к API «Is Site Up?», он возвращает нам Python словарь с некоторыми данными как следующем скриншоте: В данном словаре есть ключ message. Значение этого ключа и показывает нам состояние сайта. Данный ключ может иметь два значения: Site is up Site is down Итак, мы отправим почту, когда получим сообщение «Site is down». Окончательный код будет выглядеть так: import requests import yagmail API_URL = "https://geekflare.p.rapidapi.com/up" def make_api_request(): headers = { 'content-type': "application/json", 'x-rapidapi-host': "geekflare.p.rapidapi.com", 'x-rapidapi-key': "API_KEY" } payload = r'{"url": "https://www.abcd.com"}' response = requests.request("POST", API_URL, data=payload, headers=headers) return response.json() def send_mail(content): gmail = yagmail.SMTP("gmail", "password") receiver = "email@domain.com" subject = "Your Site is Down" gmail.send( to=receiver, subject=subject, contents=content, ) if __name__ == '__main__': data = make_api_request() message = data['message'] ## seding the mail if message == 'Site is down.': ## extracting the errors from different locations locations_data = data['data'] mail_content = "Your site is down due to unexpected error. See the useful data to resolve errors below. " for location in locations_data: mail_content += f"{location['city']}, {location['country']} - {location['error']} " mail_content += " Check the error and resolve them as soon as possible." send_mail(mail_content) Тело сообщения можете редактировать по своему усмотрению. Мы завершили код отправки почты всякий раз, когда наш сайт не работает. Смотри образец сообщения, полученного с помощью вышеуказанного кода. Но, есть еще проблема. Мы должны выполнить наш код, чтобы проверить, работает ли наш сайт или нет. Частота запуска данного скрипта зависит от ваших предпочтений. Допустим, мы должны проверять сайт каждые час. Правда, мы можем каждый час открыть терминал и запустить скрипт. Но это скучно и неэффективно. Плюс к этому, никто так не делает. Решение напрашивается само: использовать cron для автоматического выполнения нашего кода каждый час. Посмотрим, как его настроить. Настройка Cron Рассмотрим шаги по настройке cron в операционной системе на базе UNIX. Открыть терминал. Выполните команду crontab -e, которая открывает файл crontab на терминале. Нажмите клавишу i для перехода в режим ВВОДА. Теперь добавьте шаблон cron, пути к исполняемому файлу Python и нашему файлу, как указано ниже: 0 * * * * /usr/bin/python3 /home/sample.py Подробно про cron можно прочесть в этой статье. Итак, мы настроили планировщик для ежечасного запуска кода. Если нужно будет указать другое расписание, можно воспользоваться разными утилитами для генерации шаблона расписания для cron. Пожалуй, теперь все. Мы настроили проверку сайта каждый час и получение уведомления на почту, если сайт станет недоступен. Заключение Автоматизация экономит много времени и работает на нас. Можно настроить cron на каком-нибудь облаке, чтобы он постоянно работал, проверял состояние сайта и уведомлял нас при сбое.
img
В данной статье я опишу несложный процесс регистрации нового транка при помощи web – интерфейса FreePBX 13. Процесс продемонстрирован при выборе провайдера Celecom (www.celecom.ru) , но он достаточно схож для многих провайдеров. Пошаговое видео Добавить SIP - транк Необходимо попасть в меню администрирования транков по следующему пути: Connectivity → Trunks Далее нажать «Add Trunk» и выбрать необходимый тип транка. В данном случае выберем опцию Add SIP (chan_sip) Trunk Далее необходимо придумать имя транка, в данном случае trunktest. Коротко про опции в данном поле: Trunk Name - Название транка Hide CallerID - Опция скрытия CID при исходящем вызове Outbound CallerID CID, который будет передаваться при исходящем вызове CID Options - Настройки передачи CID – разрешить все, запретить иностранные и т.д Maximum Channels - максимальное количество одновременных разговоров вне локальной сети Asterisk Trunk Dial Options - модификация Dial options, в данном случае оставим опцию дефолтной Continue if Busy - опция направления вызова на следующий транк даже если канал сообщает «BUSY» или «INVALID NUMBER» Disable Trunk - опция выключения транка Далее необходимо проследовать в поле «sip Settings» Для начала настроим настройки исходящих вызовов в поле «Outgoing» Дублируем название транка и вставляем настройки: host=sip.sun-tel.ru type=peer context=from-trunk username=ваш_sipid -логин, который выдается провайдером(ваш номер) secret=ваш_пароль – пароль, выданный провайдером fromuser= ваш_sipid fromdomain=sip.sun-tel.ru qualify=yes insecure=invite,port faxdetect=no account=celecom Заключительный шаг – необходимо ввести строку регистрации (registration string) в поле «Incoming» ваш_Sipid:PASSWORD@sip.sun-tel.ru/ВАШ_НОМЕР Если все было сделано правильно, то необходимо нажать Submit и Apply Config. Если данные аккаунты верны, то в окне мониторинга «Dashboard» вы увидите, что транк поднялся. Настройка исходящих и входящих маршрутов будет рассмотрена в следующей статье.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59