top of page
Level 1
У ворот
Evil Corporation
"Wintermute"
Итак, наши герои у ворот Wintermute (The Evil Corporation™).
Однако, ворота тщательно закрыты на пять замков, каждый из которых защищён шифром.
Этот шифр называется шифром Цезаря (потому что ещё до Wintermute им пользовался Гай Юлий Цезарь), и на самом деле он крайне прост.
Всё, что нужно для шифровки сообщения - это сдвинуть алфавит на определённое количество букв и вместо каждой буквы сообщения подставить соответствующую ему букву сдвинутого алфавита.
Например, сдвиг на 3 буквы вправо:
(Обратите внимание, что буквы X, Y, Z, которым не хватило места после сдвига, "закругляются" и дополняют три первые буквы алфавита).
Теперь, если нам нужно зашифровать слово BACK, получается вот что:
Как раскрыть шифр Цезаря ?
Нет ничего проще.
В этом задании хакеры применят тактику, которая называется brute force (или "грубая сила"), то есть просто-напросто попробуют сдвинуть алфавит всеми возможными способами (а именно 26-ю, так как мы будем иметь дело с латинским алфавитом и только с заглавными буквами).
После применения процедуры расшифровки к каждому сдвигу, вам надо будет посмотреть на результат и решить, является ли полученная фраза настоящим английским предложением или нет.
Вот и всё!
Как решить задачу ?
Что вам может понадобиться для решения ?
Конечно же, вы должны изучить loops в Пайтоне: во-первых, нужно будет пройти через все 26 сдвигов алфавита; во-вторых, нужно будет пройти через все символы сообщения.
Можно представить секретное сообщение и алфавит двумя строками, например:
secret_message = 'ADQWEEROIEM ASASDASAE WEORIERF'
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
Найти номер символа в строке можно с помощью функции find:
num = string.find(symbol)
Узнать длину строки можно с помощью функции len:
string_length = len(string)
Распечатать все буквы алфавита можно, например, с помощью такой конструкции:
for index in range(len(alphabet)):
print(alphabet[index])
Попробуйте самостоятельно разобраться в том, как это работает и что такое range.
Добиться того же результата можно и проще:
for letter in alphabet:
print(letter)
Или даже так:
for index, letter in enumerate(alphabet):
print(letter)
Этот вариант похож на первый, потому что даёт вам не только букву, но и её номер (индекс) в строке, только здесь используется функция enumerate.
Добавить символ к строке можно с помощью операции +:
string = string + new_symbol
Это были только небольшие подсказки (заметьте, вы можете избрать совершенно другой способ решения, так что эти подсказки могут даже и не пригодиться!). Основную работу вам придётся проделать самостоятельно!
Как раскрыть пароль ?
Каждый хакер в своём почтовом ящике получит секретное сообщение, закодированное шифром Цезаря. Раскрыв его, хакер сможет сообщить свою часть пароля остальным (см. место для обсуждения ниже).
Важно!
Пароль будет состоять из частей, раскрытых каждым из хакеров в следующем порядке:
Линус + Сатоши Накамото + Тринити + J.F.Sebastian + Дораемон
Пример. Представим, что каждый из хакеров раскрыл такие части пароля:
Линус: "A"
Сатоши Накамото: "12"
Тринити: "x"
J.F.Sebastian: "do"
Дораемон: "XYZ"
В этом случае пароль для перехода на второй уровень будет A12xdoXYZ.
Внимание - тот же принцип составления пароля будет действителен и для всех следующих уровней!
до конца уровня
Теперь, когда вы знаете пароль, можете переходить на
bottom of page