Шифр Цезаря

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Шифр Цезаря

Шифр Цезаря — симетричний алгоритм шифрування підстановками. Використовувався римським імператором Юлієм Цезарем для приватного листування.

Принцип дії[ред.ред. код]

Принцип дії полягає в тому, щоб циклічно зсунути алфавіт, а ключ — це кількість літер, на які робиться зсув.

Математична модель[ред.ред. код]

Якщо зіставити кожному символу алфавіту його порядковий номер (нумеруючи з 0), то шифрування і дешифрування можна виразити формулами:

де — порядковий номер символу відкритого тексту, — порядковий номер символу шифрованого тексту, потужність алфавіту, а — ключ.

Можна помітити, що суперпозиція двох шифрувань на ключах і є просто шифруванням на ключі . Більш загально, множина шифруючих перетворень шифру Цезаря утворює групу .

Приклад[ред.ред. код]

Припустимо, що, використовуючи шифр Цезаря, з ключем, який дорівнює 3, необхідно зашифрувати словосполучення «ШИФР ЦЕЗАРЯ».

Для цього зрушимо алфавіт так, щоб він починався з четвертої букви (Г). Отже, беручи вихідний алфавіт

АБВГДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ,

і зміщуючи всі літери вліво на 3, отримуємо відповідність:
А Б В Г Д Е Є Ж З И І Ї Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ю Я
Г Д Е Є Ж З И І Ї Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ю Я А Б В,
де Г=А, Д=Б, Ж=В, і т. д.

Використовуючи цю схему, відкритий текст «ШИФР ЦЕЗАРЯ» перетворюється на «ЮЙЧУ ЩЗЇГУВ». Для того, щоб одержувач повідомлення міг відновити вихідний текст, необхідно повідомити йому, що ключ — 3.

Криптоаналіз[ред.ред. код]

Шифр Цезаря має замало ключів — на одиницю менше, ніж літер в абетці. Тому перебрати усі ключі не складає особливої роботи. Дешифрування з одним з ключів дасть нам вірний відкритий текст.

Також зламати шифр Цезаря можна, як і звичайний підстановочний шифр, у зв'язку з тим, що частота появи кожної літери в шифртексті збігається з частотою появи у відкритому тексті. Якщо припустити, що частота появи літер у відкритому тексті приблизно відповідає середньостатистичній відносній частоті появи літер в текстах мови, на якій написано повідомлення, тоді ключ знаходиться зіставленням перших декількох літер, що трапляються найчастіше у відкритому та зашифрованому текстах. Тобто за допомогою методу частотного криптоаналізу.

Див. також[ред.ред. код]

Програма[ред.ред. код]

<!DOCTYPE html> <html lang="en"> <head>

   <meta charset="UTF-8">
   <title>Шифр Цезаря</title>
   <link rel="stylesheet" type="text/css" href="css/style.css">

</head> <body>

   Повідомлення:
   
<input type='text' id='message'>

Зсув (число): <input type='text' id='shift' value='3'>

<button onclick='encrypt()'>Зашифрувати</button>

<button onclick='decrypt()'>Розшифрувати</button>

Результат:
<input type='text' id='cipher'> <script> var alphabet = 'АБВГДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ_'; function shiftAlphabet(shift) { console.log(shift) var shiftedAlphabet = 'ГДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯАБВ_'; //новий алфавіт for (var i = 0; i < alphabet.length; i++) { //console.log(i, alphabet[i+shift]); currentLetter = (alphabet[i + shift] === undefined) ? (alphabet[i + shift - alphabet.length]) : (alphabet[i + shift ]); //Поточна буква з зсувом, якщо виходимо за рамки довжини алфавіту - берем з початку алфавіту shiftedAlphabet = shiftedAlphabet.concat(currentLetter); } return shiftedAlphabet; } console.log(shiftedAlphabet); function encrypt() { var message = document.getElementById('message').value; var shift = parseInt(document.getElementById('shift').value); var shiftedAlphabet = shiftAlphabet(shift); var encryptedMessage = ; for (var i = 0; i < message.length; i++) { var indexOfLetter = alphabet.indexOf(message[i].toUpperCase()); encryptedMessage = encryptedMessage.concat(shiftedAlphabet[indexOfLetter]); } document.getElementById('cipher').value = encryptedMessage.toLowerCase(); } function decrypt() { var message = document.getElementById('message').value; var shift = parseInt(document.getElementById('shift').value); var shiftedAlphabet = shiftAlphabet(shift); var encryptedMessage = ; for (var i = 0; i < message.length; i++) { if (message[i] == ' ') { encryptedMessage = encryptedMessage.concat(' '); continue}; var indexOfLetter = shiftedAlphabet.indexOf(message[i].toUpperCase()); encryptedMessage = encryptedMessage.concat(alphabet[indexOfLetter]); } document.getElementById('cipher').value = encryptedMessage.toLowerCase(); } </script>

</body> </html>


Посилання[ред.ред. код]


Сигма Це незавершена стаття з математики.
Ви можете допомогти проекту, виправивши або дописавши її.