Введение

Шифр Цезаря — один из самых древних и известных алгоритмов шифрования, названный в честь римского императора Гая Юлия Цезаря, который использовал его для защиты своих военных сообщений. Это метод замены символов, в котором каждая буква в открытом тексте заменяется буквой, находящейся на фиксированное число позиций (ключ) дальше в алфавите.

Пример шифрования

  • Исходный текст: "HELLO"

  • Ключ: 3

  • Зашифрованный текст: "KHOOR" (H→K, E→H, L→O, L→O, O→R)


Принцип работы шифра Цезаря

Шифр Цезаря — это частный случай аффинного шифра, где каждая буква алфавита сдвигается на фиксированное число позиций.


Реализация алгоритма

1. Шифрование текста

 

def caesar_encrypt(text, shift):
    encrypted_text = []
    for char in text:
        if char.isalpha():  # Работаем только с буквами
            base = ord('A') if char.isupper() else ord('a')
            shifted_char = chr((ord(char) - base + shift) % 26 + base)
            encrypted_text.append(shifted_char)
        else:
            encrypted_text.append(char)  # Не буквы оставляем без изменений
    return ''.join(encrypted_text)

Пример работы:

 

print(caesar_encrypt("HELLO", 3))  

# Вывод: "KHOOR"

2. Дешифрование текста

 

def caesar_decrypt(text, shift):
    return caesar_encrypt(text, -shift)  # Сдвигаем в обратную сторону

Пример работы:

 

print(caesar_decrypt("KHOOR", 3))  
# Вывод: "HELLO"

Особенности и ограничения

  1. Поддержка разных алфавитов

    • Для русского алфавита нужно изменить 26 на 33 (или 32, если исключить Ё).

    • Пример для кириллицы:

       

      base = ord('А') if char.isupper() else ord('а')
      shifted_char = chr((ord(char) - base + shift) % 32 + base)
  2. Уязвимость к взлому

    • Шифр Цезаря легко взламывается методом полного перебора (всего 25 возможных ключей для английского алфавита).

    • Также уязвим к частотному анализу (буквы в зашифрованном тексте сохраняют статистику оригинала).