Симулятор шифровальной машины Энигма на Rust: историческая точность, двойной шаг роторов, нулевые аллокации. Попробуйте Python-биндинги прямо сейчас.
Шифровальная машина Энигма — символ криптографии XX века. Её конструкция: роторы, рефлектор, коммутационная панель и механическая аномалия двойного шага — обязательна для изучения каждому, кто интересуется классическими шифрами. Большинство симуляторов упрощают детали, но библиотека Enigmar воспроизводит машины M3/M4 с исторической точностью. Она написана на Rust для скорости и корректности, а благодаря биндингам PyO3 вы можете экспериментировать прямо в Python.
Enigmar фокусируется на точности:
Внутри ядро использует таблицы [u8; 26] для отображения символов с нулевыми аллокациями и сложностью O(1). Это достаточно быстро для масштабных экспериментов или учебных демонстраций.
Каждое нажатие клавиши проходит через коммутационную панель, три ротора, рефлектор и обратно через роторы и панель:
Вход → Панель → Ротор III → Ротор II → Ротор I → Рефлектор
↓
Выход ← Панель ← Ротор III ← Ротор II ← Ротор I ←────┘Перед обработкой каждого символа правый ротор всегда делает шаг. Если он стоит на своей выемке, то шагает и средний ротор. А если средний ротор на выемке — шагают и средний, и левый. Это и есть двойной шаг, который сокращал период машины.
[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);
}pip install maturin
maturin develop --features extension-modulefrom 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()Дешифрование использует те же настройки: создайте новую машину с идентичными роторами, рефлектором и панелью, затем передайте шифротекст.
Enigmar создан для обучения: студенты-криптографы, изучающие роторные шифры; разработчики, интересующиеся PyO3-взаимодействием Rust и Python; или любой, кто хочет воспроизвести шифрование эпохи Блетчли-парка на современном оборудовании. Экспорт ключей в JSON позволяет сохранять, делиться и воспроизводить точные конфигурации для преподавания или тестирования.
Попробуйте прямо сейчас: зашифруйте что-нибудь, экспортируйте ключ, создайте новую машину и расшифруйте обратно. Это простой и наглядный способ увидеть, как работает инженерия 1930-х годов.
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →