Введение
Шифр Цезаря — один из самых древних и известных алгоритмов шифрования, названный в честь римского императора Гая Юлия Цезаря, который использовал его для защиты своих военных сообщений. Это метод замены символов, в котором каждая буква в открытом тексте заменяется буквой, находящейся на фиксированное число позиций (ключ) дальше в алфавите.
Пример шифрования
Исходный текст:
"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"
Особенности и ограничения
Поддержка разных алфавитов
Для русского алфавита нужно изменить
26
на33
(или32
, если исключитьЁ
).Пример для кириллицы:
base = ord('А') if char.isupper() else ord('а') shifted_char = chr((ord(char) - base + shift) % 32 + base)
Уязвимость к взлому
Шифр Цезаря легко взламывается методом полного перебора (всего 25 возможных ключей для английского алфавита).
Также уязвим к частотному анализу (буквы в зашифрованном тексте сохраняют статистику оригинала).