ГлавнаяБлогСимулятор Энигмы на Rust с биндингами для Python
Python

Симулятор Энигмы на Rust с биндингами для Python

Симулятор шифровальной машины Энигма на Rust: историческая точность, двойной шаг роторов, нулевые аллокации. Попробуйте Python-биндинги прямо сейчас.

Al
Редакция Algolitalgolit.ru
7 мин чтения3 июля 2026 г.

Зачем симулятор Энигмы на Rust?

Шифровальная машина Энигма — символ криптографии XX века. Её конструкция: роторы, рефлектор, коммутационная панель и механическая аномалия двойного шага — обязательна для изучения каждому, кто интересуется классическими шифрами. Большинство симуляторов упрощают детали, но библиотека Enigmar воспроизводит машины M3/M4 с исторической точностью. Она написана на Rust для скорости и корректности, а благодаря биндингам PyO3 вы можете экспериментировать прямо в Python.

Почему это интересно

Enigmar фокусируется на точности:

  • Роторы I–VIII и рефлекторы B, C, B-thin, C-thin — соответствуют реальным схемам соединений
  • Правильный двойной шаг — механическая аномалия, когда средний ротор иногда делает два шага подряд
  • Взаимное шифрование — из-за рефлектора шифрование и дешифрование идентичны при одинаковых настройках
  • Отсутствие самозашифровки буквы — слабость, которую использовали криптоаналитики; Enigmar воспроизводит её, а не «исправляет»

Внутри ядро использует таблицы [u8; 26] для отображения символов с нулевыми аллокациями и сложностью O(1). Это достаточно быстро для масштабных экспериментов или учебных демонстраций.

Как работает путь сигнала

Каждое нажатие клавиши проходит через коммутационную панель, три ротора, рефлектор и обратно через роторы и панель:

Вход → Панель → Ротор III → Ротор II → Ротор I → Рефлектор
                                                          ↓
Выход ← Панель ← Ротор III ← Ротор II ← Ротор I ←────┘

Перед обработкой каждого символа правый ротор всегда делает шаг. Если он стоит на своей выемке, то шагает и средний ротор. А если средний ротор на выемке — шагают и средний, и левый. Это и есть двойной шаг, который сокращал период машины.

Начало работы

Rust

[dependencies]
enigmar = { path = "." }
use enigmar::EnigmaBuilder;

fn main() {
    let mut machine = EnigmaBuilder::new()
        .rotor("I", 0, 0)
        .rotor("II", 0, 0)
        .rotor("III", 0, 0)
        .reflector("B")
        .plugboard("AV BS CG DL FU HZ IN KM OW RX")
        .build()
        .unwrap();
    let ciphertext = machine.process_string("HELLOWORLD");
    println!("Encrypted: {}", ciphertext);
}

Python

pip install maturin
maturin develop --features extension-module
from enigmar import EnigmaBuilder

builder = EnigmaBuilder()
builder.rotor("I", 0, 0)
builder.rotor("II", 0, 0)
builder.rotor("III", 0, 0)
builder.reflector("B")
builder.plugboard("AV BS CG DL FU HZ IN KM OW RX")
machine = builder.build()
ciphertext = machine.process_string("HELLOWORLD")
print(f"Encrypted: {ciphertext}")

# Сохраняем и восстанавливаем состояние
key = machine.export_key()
machine.import_key(key)
machine.reset()

Дешифрование использует те же настройки: создайте новую машину с идентичными роторами, рефлектором и панелью, затем передайте шифротекст.

API на одном экране

EnigmaBuilder

  • new() — создать пустой строитель
  • .rotor(type, position, ring) — добавить ротор слева направо. Типы: "I"–"VIII"
  • .reflector(type) — установить рефлектор: "B", "C", "B-thin", "C-thin"
  • .plugboard(pairs) — задать до 13 пар, например "AB CD EF"
  • .build() — получить EnigmaMachine

EnigmaMachine

  • process_string(input) — шифровать/дешифровать; небуквенные символы отбрасываются
  • export_key() — сериализовать состояние в JSON
  • import_key(key) — восстановить состояние из JSON
  • reset() — сбросить роторы в начальные позиции

Для кого это

Enigmar создан для обучения: студенты-криптографы, изучающие роторные шифры; разработчики, интересующиеся PyO3-взаимодействием Rust и Python; или любой, кто хочет воспроизвести шифрование эпохи Блетчли-парка на современном оборудовании. Экспорт ключей в JSON позволяет сохранять, делиться и воспроизводить точные конфигурации для преподавания или тестирования.

Попробуйте прямо сейчас: зашифруйте что-нибудь, экспортируйте ключ, создайте новую машину и расшифруйте обратно. Это простой и наглядный способ увидеть, как работает инженерия 1930-х годов.

#энигма#шифрование#rust#python#криптография
Al
Редакция Algolit

Пишем про алгоритмы, подготовку к собеседованиям и карьеру в IT — так, чтобы было понятно и полезно.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →