Leia este documento em Inglês (Read this document in English)
Um simulador de interface de linha de comando (CLI) da máquina de criptografia Enigma M3 da Segunda Guerra Mundial, escrito em C++ moderno.
-
Simulação completa da Enigma M3 com rotores (I-V), refletores (A, B, C) e um plugboard configurável.
-
Operação em Modo Duplo: Funciona tanto como um menu interativo quanto como uma ferramenta de pipeline de linha de comando.
-
Suporte Completo de E/S (I/O): Lê do
stdinou de arquivos, escreve nostdoutou em arquivos, e funciona perfeitamente com pipes (|). -
Configuração Completa: Todas as configurações da máquina são controláveis via flags de linha de comando (rotores, posições, refletor e plugboard).
-
Validação Robusta: Protege contra configurações inválidas da máquina (ex: contagem incorreta de rotores, posições não-alfabéticas).
-
Modo Passo-a-Passo: Um recurso especial no menu interativo para visualizar o caminho do caractere durante a criptografia.
git(para clonar e para oFetchContent)cmake(versão 3.14 ou superior)- Um compilador C++17 (ex:
g++,Clang,MSVC)
# 1. Clone o repositório
git clone [https://github.com/devbrunofernandes/enigma.git](https://github.com/devbrunofernandes/enigma.git)
cd enigma
# 2. Crie um diretório de build
mkdir build && cd build
# 3. Configure com o CMake
# (Isto irá baixar a dependência cxxopts automaticamente)
cmake ..
# 4. Compile o projeto
cmake --build .Este simulador pode rodar em dois modos distintos, dependendo de como é iniciado.
Inicia um menu interativo que guia o usuário na configuração da máquina Enigma e na criptografia de textos.
Como rodar:
./enigma_machineCaso de Uso: Ideal para aprender como a máquina funciona, testar configurações ou usar o visualizador passo-a-passo.
Funciona como um filtro de linha de comando, processando toda a entrada do stdin ou de um arquivo e imprimindo o resultado no stdout ou em um arquivo.
Como rodar:
- Passando qualquer argumento de linha de comando (como
-hou-f). - Usando um pipe (
|) para enviar dados. - Redirecionando (
>) a saída.
Caso de Uso: Feito para scripting e integração com outras ferramentas de linha de comando em um pipeline Unix. Também serve para processar arquivos de texto.



