Шифр Цезаря на Python: создаем инструмент для зашифровки и расшифровки текста
Шифр Цезаря - это один из самых простых и широко известных шифров, который представляет собой сдвиг каждой буквы в сообщении на некоторый фиксированный ключ (число), определенный заранее. Например, при сдвиге на 3 буквы, буква 'A' становится буквой 'D', 'B' - 'E' и т.д.
Для реализации шифра Цезаря в Python необходимо выполнить следующие шаги:
1. Задать алфавит, на котором будем работать. Например, латинский алфавит в нижнем регистре:
alphabet = 'abcdefghijklmnopqrstuvwxyz'
2. Создать функцию шифрования, которая будет получать на вход сообщение и ключ (число) для сдвига букв. Внутри функции нужно выполнить следующие шаги:
- Преобразовать сообщение в нижний регистр, чтобы избежать ошибок при работе с разными регистрами;
- Создать пустую строку, которая будет хранить зашифрованное сообщение;
- Для каждой буквы в сообщении проверяем, является ли она буквой алфавита. Если не является, просто добавляем букву в зашифрованное сообщение. Если является, то необходимо выполнить сдвиг буквы на ключ позиций. Для этого можно использовать индекс буквы в алфавите, прибавив к нему ключ и взяв остаток от деления на длину алфавита, чтобы избежать выхода за его пределы;
- Добавляем зашифрованную букву в строку зашифрованного сообщения;
- Возвращаем зашифрованное сообщение. Код функции может выглядеть так:
def caesar_cipher(message, key):
message = message.lower()
encrypted_message = ''
for letter in message:
if letter not in alphabet:
encrypted_message += letter
else:
index = alphabet.index(letter)
encrypted_index = (index + key) % len(alphabet)
encrypted_letter = alphabet[encrypted_index]
encrypted_message += encrypted_letter
return encrypted_message
3. Чтобы расшифровать сообщение, нужно создать аналогичную функцию расшифровки. Она будет получать зашифрованное сообщение и ключ, но вместо сдвига вправо по алфавиту, мы будем выполнять сдвиг влево на ключ позиций. Код функции может выглядеть так:
def caesar_decipher(encrypted_message, key):
decrypted_message = ''
for letter in encrypted_message:
if letter not in alphabet:
decrypted_message += letter
else:
index = alphabet.index(letter)
decrypted_index = (index - key) % len(alphabet)
decrypted_letter = alphabet[decrypted_index]
decrypted_message += decrypted_letter
return decrypted_message
Пример использования этих функций может выглядеть так:
message = 'hello world'
key = 3
encrypted_message = caesar_cipher(message, key)
print(encrypted_message) # выводит 'khoor zruog'
decrypted_message = caesar_decipher(encrypted_message, key)
print(decrypted_message) # выводит 'hello world'
Таким образом, функции caesar_cipher и caesar_decipher позволяют зашифровывать и расшифровывать сообщения с использованием шифра Цезаря в Python.