Skip to content

YalfimovIvan/classical-cryptography-python

Repository files navigation

Классическая криптография на Python

Большинство скриптов работают как интерактивные CLI-программы: пользователь выбирает язык, режим, ключ и текст, а затем получает результат шифрования или расшифрования.

Состав репозитория

hill_cipher.py

Реализация классического шифра Хилла.

Что делает:

  • переводит текст в числа по выбранному алфавиту
  • разбивает сообщение на блоки фиксированной длины
  • умножает каждый блок на ключевую матрицу по модулю размера алфавита
  • для расшифрования строит обратную матрицу по модулю

Какие алгоритмы используются:

  • поблочное матричное шифрование
  • вычисление обратного элемента по модулю
  • восстановление обратной матрицы через определитель и numpy

recurrent_hill_cipher.py

Расширение шифра Хилла с рекуррентной генерацией ключей.

Что делает:

  • использует две стартовые матрицы key1 и key2
  • после обработки очередного блока обновляет ключи по рекуррентному правилу
  • делает последовательность ключей зависимой от предыдущих шагов

Какие алгоритмы используются:

  • матричное шифрование по модулю
  • генерация рекуррентной последовательности матриц
  • обратное преобразование для расшифрования каждого блока

vigenere_cipher.py

Классический шифр Виженера с циклическим повторением ключа.

Что делает:

  • для каждого символа текста берёт символ ключа по индексу i % key_len
  • сдвигает индекс буквы по модулю алфавита
  • поддерживает режимы шифрования и расшифрования

Какие алгоритмы используются:

  • табличный полиалфавитный сдвиг
  • модульная арифметика в пространстве индексов алфавита

ciphertext_autokey_vigenere.py

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

Особенность алгоритма:

  • при шифровании после начального ключа используются уже полученные символы шифртекста
  • при расшифровании используется та же логика восстановления ключевой последовательности

plaintext_autokey_vigenere.py

Самоключевой вариант Виженера, где ключ продолжается символами открытого текста.

Особенность алгоритма:

  • шифрование строит ключ как initial_key + plaintext
  • расшифрование восстанавливает следующий ключевой символ из уже расшифрованного текста

galois_fields_and_affine_cipher.py

Модуль совмещает арифметику в полях Галуа GF(p^n) и аффинный шифр, построенный на элементах поля.

Что реализовано:

  • генерация элементов поля Галуа
  • проверка неприводимости многочлена
  • деление многочленов с остатком
  • расширенный алгоритм Евклида для многочленов
  • поиск обратного элемента
  • поиск примитивных элементов мультипликативной группы
  • построение логарифмических таблиц
  • отображение текста в элементы поля и обратно
  • аффинное шифрование текста в терминах многочленов

Какие алгоритмы используются:

  • арифметика многочленов по модулю неприводимого многочлена
  • расширенный алгоритм Евклида
  • быстрое возведение в степень
  • разложение порядка группы на простые множители
  • работа с конечными полями для шифрования текста

Как устроен код

Общая схема для шифров:

  1. Пользователь выбирает язык и режим.
  2. Текст переводится в индексы алфавита.
  3. Применяется соответствующее преобразование.
  4. Результат переводится обратно в текст.

Для модуля полей Галуа сценарий шире:

  1. Выбираются параметры поля p и n.
  2. Строится неприводимый многочлен степени n.
  3. Выполняются операции над многочленами.
  4. При необходимости текст отображается в элементы поля и шифруется аффинным преобразованием.

Зависимости

  • Python 3.10+
  • numpy для матричных вычислений в шифре Хилла

Запуск

Каждый файл запускается отдельно:

python hill_cipher.py
python recurrent_hill_cipher.py
python vigenere_cipher.py
python ciphertext_autokey_vigenere.py
python plaintext_autokey_vigenere.py
python galois_fields_and_affine_cipher.py

About

Реализация классической криптографии и эксперименты с конечными полями на Python.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages