/
taesonx
/
practica-decoder
Обзор
Документация
Войти
/
taesonx
/
practica-decoder
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
site/variant_guide.html
244 строки
15 KB
taesonx
update: variant_guide.html
22 май 2026, 13:50
Верифицирован
22 май 2026, 13:50
197012f
Код
Авторство
О чём код?
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Техническое руководство | Криптографический движок</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%); color: #eee; line-height: 1.6; padding: 2rem; } .container { max-width: 1100px; margin: 0 auto; background: rgba(255,255,255,0.1); padding: 2rem; border-radius: 20px; } h1, h2, h3 { color: #e94560; margin-top: 1.5rem; margin-bottom: 1rem; } h1 { text-align: center; font-size: 2rem; } pre { background: #0a0c0f; padding: 1rem; border-radius: 10px; overflow-x: auto; margin: 1rem 0; font-size: 0.85rem; border-left: 3px solid #e94560; } code { font-family: 'Courier New', monospace; background: #0a0c0f; padding: 0.2rem 0.4rem; border-radius: 5px; } .note { background: rgba(233,69,96,0.2); border-left: 4px solid #e94560; padding: 1rem; margin: 1rem 0; border-radius: 0 10px 10px 0; } .step { margin: 2rem 0; } .step-number { background: #e94560; display: inline-block; width: 30px; height: 30px; text-align: center; line-height: 30px; border-radius: 50%; margin-right: 0.5rem; } ul, ol { margin: 1rem 0; padding-left: 2rem; } hr { border-color: #e94560; margin: 2rem 0; } .btn-back { display: inline-block; background: #e94560; color: white; padding: 0.8rem 1.5rem; text-decoration: none; border-radius: 50px; margin-top: 2rem; } .btn-back:hover { background: #ff6b8a; } footer { text-align: center; margin-top: 2rem; opacity: 0.7; } .screenshot { background: #0a0c0f; border-radius: 10px; padding: 1rem; margin: 1rem 0; text-align: center; } .screenshot img { max-width: 100%; border-radius: 8px; } .screenshot-caption { font-size: 0.8rem; margin-top: 0.5rem; opacity: 0.7; } </style> </head> <body> <div class="container"> <h1>📘 Техническое руководство</h1> <h2 style="text-align: center; margin-top: -0.5rem;">Криптографический движок: создание шифра с нуля</h2> <div class="note"> 💡 <strong>О чём этот туториал</strong><br> Криптографический движок — программный компонент, объединяющий 8 алгоритмов шифрования. В этом руководстве мы покажем, как создать <strong>один из модулей движка</strong> — шифр Цезаря — с нуля на чистом JavaScript. </div> <h2>📌 Введение</h2> <p>В рамках вариативной части (вариант 2.2) реализован программный компонент <strong>«Криптографический движок»</strong>, поддерживающий 8 классических шифров. Приложение написано на чистом JavaScript, HTML и CSS без использования внешних библиотек.</p> <p><strong>Ссылка на демо:</strong> <a href="https://msfelzhel.github.io/decoder-app/" style="color: #e94560;">https://msfelzhel.github.io/decoder-app/</a></p> <h2>🏗️ Архитектура компонента</h2> <p>Криптографический движок построен по принципу <strong>единого фасада</strong>, который управляет 8 изолированными модулями шифров.</p> <pre> ┌─────────────────────────────────────────┐ │ Веб-интерфейс (демо-слой) │ └─────────────────┬───────────────────────┘ │ ┌─────────────────▼───────────────────────┐ │ Криптографический движок (ядро) │ │ ┌─────────────────────────────────┐ │ │ │ 8 изолированных модулей шифров │ │ │ └─────────────────────────────────┘ │ └─────────────────────────────────────────┘ 📁 Структура проекта: decoder-app/ └── index.html # Основной интерфейс (CSS + JavaScript внутри)</pre> <h3>Компоненты приложения</h3> <ul> <li><strong>HTML</strong> — разметка страницы (карточки шифров, поля ввода, кнопки)</li> <li><strong>CSS</strong> — стилизация (тёмная тема, адаптивная вёрстка)</li> <li><strong>JavaScript</strong> — ядро движка (логика работы всех 8 шифров)</li> </ul> <h2>🔐 Реализованные алгоритмы (8 шт.)</h2> <ul> <li>Шифр Цезаря</li> <li>Шифр Атбаш</li> <li>Азбука Морзе</li> <li>Шифр Виженера</li> <li>Шифр Вернама (XOR)</li> <li>Шифр Полибия</li> <li>Rail Fence</li> <li>Пляшущие человечки</li> </ul> <!-- Скриншоты --> <div class="screenshot"> <p><strong>Рисунок 1 — Главный экран криптографического движка</strong></p> <img src="images/main.png" alt="Главный экран" style="max-width:100%; border-radius:8px; border: 1px solid #e94560;"> <p class="screenshot-caption">Интерфейс с 8 алгоритмами шифрования</p> </div> <div class="screenshot"> <p><strong>Рисунок 2 — Пример работы шифра Цезаря</strong></p> <img src="images/ceasar.png" alt="Шифр Цезаря" style="max-width:100%; border-radius:8px; border: 1px solid #e94560;"> <p class="screenshot-caption">Шифрование текста со сдвигом 3</p> </div> <h2>📝 Пошаговая инструкция: создание модуля «Шифр Цезаря»</h2> <div class="step"> <h3><span class="step-number">1</span> HTML-разметка</h3> <p>Создаём карточку шифра с полями ввода, сдвигом и кнопками:</p> <pre><div class="cipher-card"> <h3>🔐 Шифр Цезаря</h3> <input type="text" id="caesar-input" placeholder="Введите текст"> <input type="number" id="caesar-shift" placeholder="Сдвиг (1–25)"> <button onclick="caesarCipher()">🔒 Зашифровать</button> <button onclick="caesarDecipher()">🔓 Расшифровать</button> <p>📋 Результат: <span id="caesar-result"></span></p> </div></pre> </div> <div class="step"> <h3><span class="step-number">2</span> Функция шифрования (ядро движка)</h3> <p>Реализуем логику сдвига букв с поддержкой кириллицы:</p> <pre>function caesarCipher() { let text = document.getElementById('caesar-input').value; let shift = parseInt(document.getElementById('caesar-shift').value); let result = ''; for (let i = 0; i < text.length; i++) { let char = text[i]; let code = char.charCodeAt(0); // Английский алфавит (A-Z, a-z) if (code >= 65 && code <= 90) { result += String.fromCharCode(((code - 65 + shift) % 26) + 65); } else if (code >= 97 && code <= 122) { result += String.fromCharCode(((code - 97 + shift) % 26) + 97); } // Русский алфавит (А-Я, а-я) else if (code >= 1040 && code <= 1071) { result += String.fromCharCode(((code - 1040 + shift) % 32) + 1040); } else if (code >= 1072 && code <= 1103) { result += String.fromCharCode(((code - 1072 + shift) % 32) + 1072); } else { result += char; } } document.getElementById('caesar-result').innerText = result; }</pre> <div class="note">💡 <strong>Почему это движок?</strong> Функция <code>caesarCipher()</code> — это модуль ядра. Она не зависит от интерфейса: её можно вызвать из консоли, из другого скрипта или через API.</div> </div> <div class="step"> <h3><span class="step-number">3</span> Функция расшифровки</h3> <p>Расшифровка — это шифрование с отрицательным сдвигом:</p> <pre>function caesarDecipher() { let text = document.getElementById('caesar-input').value; let shift = parseInt(document.getElementById('caesar-shift').value); let result = ''; for (let i = 0; i < text.length; i++) { let char = text[i]; let code = char.charCodeAt(0); if (code >= 65 && code <= 90) { result += String.fromCharCode(((code - 65 - shift + 26) % 26) + 65); } else if (code >= 97 && code <= 122) { result += String.fromCharCode(((code - 97 - shift + 26) % 26) + 97); } else if (code >= 1040 && code <= 1071) { result += String.fromCharCode(((code - 1040 - shift + 32) % 32) + 1040); } else if (code >= 1072 && code <= 1103) { result += String.fromCharCode(((code - 1072 - shift + 32) % 32) + 1072); } else { result += char; } } document.getElementById('caesar-result').innerText = result; }</pre> </div> <div class="step"> <h3><span class="step-number">4</span> Блок-схема алгоритма</h3> <pre> ┌─────────────────┐ │ Ввод текста │ │ и сдвига │ └────────┬────────┘ ▼ ┌─────────────────┐ │ Цикл по каждому │ │ символу │ └────────┬────────┘ ▼ ┌─────┴─────┐ │ Символ — │ │ буква? │ └─────┬─────┘ Да │ Нет ┌────────┴────────┐ │ Определяем │ │ алфавит (A-Z, │ ┌──────────┐ │ a-z, А-Я, а-я) │ │ Оставляем│ └────────┬───────┘ │ без измен.│ │ └─────┬────┘ ▼ │ ┌─────────────────┐ │ │ Вычисляем новый │ │ │ код со сдвигом │ │ └────────┬────────┘ │ │ │ └────────┬────────┘ ▼ ┌─────────────────┐ │ Вывод результата │ └─────────────────┘</pre> </div> <h2>✨ Модификации (творческая часть)</h2> <p>В рамках развития криптографического движка были добавлены следующие улучшения сверх базовой реализации:</p> <ul> <li><strong>Поддержка русского алфавита</strong> — все 8 шифров работают с кириллицей</li> <li><strong>Автоматический перебор ключа</strong> — кнопка «Подобрать ключ» для шифра Цезаря</li> <li><strong>Тёмная тема</strong> — адаптивный дизайн с высоким контрастом</li> <li><strong>Адаптивная вёрстка</strong> — корректное отображение на мобильных устройствах</li> <li><strong>8 шифров вместо минимальных 5</strong> — перевыполнение плана на 60%</li> </ul> <hr> <h2>📌 Заключение</h2> <p>Мы создали <strong>один модуль криптографического движка</strong> — шифр Цезаря. Аналогично реализованы остальные 7 алгоритмов. Получившийся программный компонент может:</p> <ul> <li>использоваться как встраиваемая библиотека шифрования</li> <li>быть расширен новыми алгоритмами (достаточно добавить функцию в фасад)</li> <li>работать независимо от веб-интерфейса (например, через консоль или API)</li> </ul> <div class="note"> 💡 <strong>Почему это технология / программный компонент?</strong><br> Криптографический движок имеет чёткую архитектуру (ядро + фасад + модули), единый интерфейс, расширяемую структуру и может встраиваться в другие проекты — всё это соответствует определению «программный компонент» из технического задания. </div> <a href="variant.html" class="btn-back">← Вернуться к вариативной части</a> <footer> <p>Проектная практика • Московский Политех • 2026</p> </footer> </div> </body> </html>