#программа дешифровки шифра Цезаря на английском и русском языках# #ключ (сдвиг) неизвестен ------------# # 1. подбирается по известным открытым словам # 2. подбирается прямым перебором #----------------------cyberbugz.ru------------------------------# #----------------------------------------------------------------# import os import sys #объявление переменнх # dictionary = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцшщъыьэюя0123456789!?., " #алфавит l_d = len(dictionary) #длина алфавита spisok=["Ярик", "Привет", "Пока", "Цезарь", "QWERTY", "Здравств", "Шифр", "password", "свидани", "пароль", "криптограф", "world", "hello"] # #ТЕЛО ПРОГРАММЫ-------------------------------------------------------------- #print(l_d) yes_no = 2 s_input = input("Введите сообщение: ") #сообщение для шифра n_end = 100 #конечный сдвиг n_page = 10 #ывод на страницу n_break = 1 n_find = 0 #==============================# # пробуем подключить интеллект # #==============================# for i in range(n_end): shift = -(i + 1) s_output = "" #-----перекодируем строку---------------------------------------------- for i in s_input: #цикл по строке(которую ввели с экрана) i_input = dictionary.find(i) #находим позицию символа в строке i_cipher = i_input + shift #позицию сдвигаем if i in dictionary: #есть ли символ в строке, если есть, то потом добавим его в выходную строку if i_cipher >= l_d: i_cipher = i_cipher - l_d #позицию нового символа сдвигаем на начало s_output = s_output + dictionary[i_cipher] #добавляем символ в выходную строку #-----проверяем наличие заданных слов в строке----------------------------------------- for word in spisok: s_output_low=s_output.lower() # исключаем проверку во всех регистрах (перевод в нижний регистр) word_low=word.lower() # нижний регистр if s_output_low.find(word_low)>=0: # find - если есть подстрока print("Вероятно, сдвиг (ключ):", -shift) print("Ключ:", - shift," ", s_output) n_find =1 # нашли ответ n_break = 2 # завершим цикл break if n_break == 2: break # #================================================================== if n_find==1: print("Пока!") sys.exit(1) # просто завершаем работу и все #----------------> конец программы #=============================# #пробуем перебор # #=============================# print("Отмысленных фраз не найдено!") print("Пробуем прямой перебор!") for i in range(n_end): shift = -(i + 1) s_output = "" #---------------------------------------------------------------------- for i in s_input: #цикл по строке(которую ввели с экрана) i_input = dictionary.find(i) #находим позицию символа в строке i_cipher = i_input + shift #позицию сдвигаем if i in dictionary: #есть ли символ в строке, если есть, то потом добавим его в выходную строку if i_cipher >= l_d: i_cipher = i_cipher - l_d #позицию нового символа сдвигаем на начало s_output = s_output + dictionary[i_cipher] #добавляем символ в выходную строку #---------------------------------------------------------------------- print("Сдвиг:", - shift," ", s_output) if -shift%n_page==0: #деление по модулю 2 - определяем остаток(100/10 - 0) n_break=int(input("Продолжить - 1 или закончить - 2?")) if n_break == 2: break #================================================================== print("Пока!")