Шифр Цезаря
Шифр Цезаря — подстановочный шифр, где каждая буква сдвигается по алфавиту на фиксированное число позиций; расшифровка — сдвиг в обратную сторону.
Что такое Шифр Цезаря
Шифр Цезаря — простейший шифр подстановки: каждая буква текста заменяется буквой, стоящей на фиксированное число позиций дальше по алфавиту. Дошёл до конца — начинаешь с начала. Число позиций и есть ключ. Гай Юлий Цезарь, по свидетельству Светония, пользовался сдвигом на 3.
При сдвиге 3 в русском алфавите:
исходный: а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я
шифр (+3): г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а б в
Пример: привет → тулезх.
Расшифровка шифра Цезаря
Расшифровка — это тот же сдвиг, только в обратную сторону: если шифровали на +3, то расшифровываете на −3 (что то же самое, что +30 для 33-буквенного алфавита).
Формула на позициях букв (нумерация с нуля):
шифрование: E(x) = (x + k) mod N
расшифровка: D(y) = (y − k) mod N
где k — ключ, N — размер алфавита: 33 для русского с «ё», 26 для латиницы.
Если ключ неизвестен — это не проблема. Вариантов всего 32, их перебирают вручную за минуту:
ALPHABET = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
def caesar(text: str, shift: int) -> str:
out = []
for ch in text:
low = ch.lower()
if low in ALPHABET:
new = ALPHABET[(ALPHABET.index(low) + shift) % len(ALPHABET)]
out.append(new.upper() if ch.isupper() else new)
else:
out.append(ch)
return "".join(out)
print(caesar("тулезх", -3)) # привет
for k in range(1, 33): # перебор, если ключ неизвестен
print(f"{k:2}: {caesar('тулезх', -k)}")
Осмысленный вариант в списке будет ровно один — его и берут. Такой метод называется полным перебором, или brute force.
Для латиницы существует именной частный случай — ROT13, сдвиг на 13. Поскольку 13 — это ровно половина от 26, шифрование и расшифровка совпадают: применил дважды, получил исходный текст.
echo "URYYB" | tr 'A-Za-z' 'N-ZA-Mn-za-m' # HELLO
Почему это не криптография в современном смысле
Шифр Цезаря вскрывается двумя способами, и оба тривиальны:
- Перебор ключей. Пространство ключей — 32 варианта. Любой компьютер проверит их мгновенно.
- Частотный анализ. Шифр не меняет статистику: буква
о— самая частая в русском тексте — останется самой частой и в шифротексте, просто под другим именем. Достаточно найти самый частый символ, предположить, что этоо, и ключ найден по одной букве. Работает даже без перебора и на длинных текстах не даёт осечек.
Отсюда главный урок, ради которого шифр Цезаря до сих пор разбирают в учебниках: стойкость шифра не должна зависеть от секретности алгоритма. Это принцип Керкгоффса — надёжна та система, где известно всё, кроме ключа. У Цезаря секретность держалась именно на незнании алгоритма противником, и как только метод стал общеизвестен, шифр умер.
Современная криптография устроена наоборот: алгоритмы AES, ГОСТ «Кузнечик» и RSA опубликованы, изучены и атакованы тысячами исследователей — а стойкость держится на размере ключа. Пространство ключей AES-256 — это 2²⁵⁶ вариантов, и перебор здесь не помогает.
Практический вывод один: шифр Цезаря, ROT13 и «свои» самодельные шифры годятся для головоломок и обучения, но не для защиты данных. Для реальной задачи берут проверенный алгоритм и готовую библиотеку — например, TLS для канала.
Связанные термины
- Криптография и СКЗИ — современные шифры и их стойкость
- TLS — чем реально защищают данные в канале
- Информационная безопасность — общий контекст
- Конфиденциальность — свойство, ради которого шифруют
Готовы запустить GPU-задачу?
Запустить GPU-сервер