Шифр Цезаря
Шифр Цезаря (шифр сдвига)
Как вы думаете, улучшает ли многократное шифрование стойкость алгоритма Цезаря?
Ответ: нет
Какой из алгоритмов ROT N можно отменить, применив тот же алгоритм? (Одни и те же действия могут быть использованы для кодирования и декодирования).
Ответ: ROT 13
Зашифруйте приведённый ниже текст алгоритмом Цезаря со сдвигом вправо на 10 символов:
Блажен, кто верует, тепло ему на свете!
a = 'Блажен, кто верует, тепло ему на свете!' s = [] for i in range(len(a)): if 1040 <= ord(a[i]) <= 1103: b = chr(ord(a[i]) + 10) s.append(b) else: s.append(a[i]) print(''.join(s))
Ответ: Лхкрпч, фьш мпъэпь, ьпщхш пцэ чк ымпьп!
Зашифруйте приведённый ниже текст алгоритмом Цезаря со сдвигом вправо на 17 символов:
To be, or not to be, that is the question!
Ответ: Kf sv, fi efk kf sv, kyrk zj kyv hlvjkzfe!
Приведённый ниже текст был получен в результате шифрования алгоритмом Цезаря со сдвигом вправо на 7 символов:
Шсъцхр щмчжмщ йшм, нмтзж йшм лхшщзщг.
Расшифруйте данный текст.
Ответ: Скупой теряет все, желая все достать.
Приведённый ниже текст был получен в результате шифрования алгоритмом Цезаря со сдвигом вправо на 25 символов:
Sgd fqzrr hr zkvzxr fqddmdq nm sgd nsgdq rhcd ne sgd edmbd.
Расшифруйте данный текст.
Ответ: The grass is always greener on the other side of the fence.
Приведённый ниже текст был получен в результате шифрования алгоритмом Цезаря со сдвигом вправо на n символов:
Hawnj pk swhg xabkna ukq nqj.
Расшифруйте данный текст.
Ответ: Learn to walk before you run.
На вход программе подается строка текста на английском языке, в которой нужно зашифровать все слова. Каждое слово строки следует зашифровать с помощью шифра Цезаря (циклического сдвига на длину этого слова). Строчные буквы при этом остаются строчными, а прописные – прописными. Гарантируется, что между различными словами присутствует один пробел.
alphabet = 'abcdefghijklmnopqrstuvwxyz' s_old = input() words = s_old.split() s_new = "" for word in words: shift = sum([int(letter.lower() in alphabet) for letter in word]) for letter in word: if letter in alphabet: old_letter_position = alphabet.index(letter) letter = alphabet[(old_letter_position + shift) % 26] elif letter.lower() in alphabet: old_letter_position = alphabet.index(letter.lower()) letter = alphabet[(old_letter_position + shift) % 26].upper() s_new += letter s_new += " " print(s_new)