Шифр Цезаря — найпростіший і найвідоміший метод шифрування. Кожну літеру тексту замінюють на літеру, що стоїть на фіксовану кількість позицій далі в алфавіті. Цю кількість позицій називають зсувом, і саме вона є ключем. За переказом, Юлій Цезар використовував зсув 3 у військовому листуванні.
Нижче є калькулятор шифру Цезаря для української та англійської абеток, режим ROT13 і таблиця зламу перебором усіх ключів.
Калькулятор шифру Цезаря
Як працює шифр Цезаря
Пронумеруємо літери алфавіту від 0. В українській абетці 33 літери: А=0, Б=1, … Я=32. Тоді шифрування літери з номером x ключем k записують так:
E(x) = (x + k) mod n
D(y) = (y − k) mod n
Тут n — кількість літер в алфавіті (33 для української, 26 для англійської). Операція mod n «загортає» абетку в кільце: після Я знову йде А. Наприклад, зі зсувом 3 слово «ЯК» стає «ВН», бо Я(32)+3=35, а 35 mod 33 = 2, тобто В.
Розшифрування — це той самий зсув у зворотний бік. Тому в калькуляторі кнопка «Розшифрувати» просто віднімає ключ.
Приклад на JavaScript
Функція нижче шифрує текст обома абетками й зберігає регістр. Пробіли, цифри та розділові знаки не змінюються.
const UA = "АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ";
const EN = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
function caesar(text, k) {
return [...text].map(ch => {
const up = ch.toUpperCase();
for (const a of [UA, EN]) {
const i = a.indexOf(up);
if (i >= 0) {
const n = a.length;
const c = a[((i + k) % n + n) % n];
return ch === up ? c : c.toLowerCase();
}
}
return ch;
}).join("");
}
caesar("Привіт", 3); // "Туйдкх"
caesar("Туйдкх", -3); // "Привіт"
Зверніть увагу на вираз ((i + k) % n + n) % n. У JavaScript і C оператор % для від’ємних чисел дає від’ємний результат, тому додаємо n ще раз. Без цього розшифрування на початку абетки зламається.
ROT13
ROT13 — це шифр Цезаря зі зсувом 13 для латиниці. Оскільки 13 + 13 = 26, тобто вся абетка, повторне застосування ROT13 повертає оригінал. Тому одна й та сама функція і шифрує, і розшифровує. На форумах ROT13 досі використовують, щоб приховати спойлери чи відповіді на загадки. Захисту він не дає жодного.
Чому шифр Цезаря легко зламати
Перебір ключів
Для української абетки існує лише 32 корисні зсуви, для англійської — 25. Комп’ютер перебирає їх миттєво, а людина знаходить осмислений рядок оком. Саме це робить таблиця під калькулятором: вона показує всі варіанти розшифрування, і серед них одразу видно правильний.
Частотний аналіз
Навіть якщо замінити зсув на довільну перестановку літер (простий шифр заміни), текст видає статистика мови. В українських текстах найчастіше трапляються О, А, Н, И, І, Т. Отже, найчастіша літера шифротексту майже напевно відповідає О. Далі злам іде як кросворд.
Де шифр Цезаря корисний
- Навчання: це найкращий спосіб пояснити, що таке ключ, алфавіт і арифметика за модулем.
- Головоломки, квести, ескейп-руми.
- Приховування спойлерів (ROT13).
Для реального захисту даних шифр Цезаря не підходить. Наступний крок еволюції — шифр Віженера, де зсув змінюється від літери до літери. А сучасний захист описано у статті про шифрування AES. Повний перелік методів зібрано на сторінці методи шифрування.
Детальніше про метод див. статтю «Шифр Цезаря» у Вікіпедії.
