ultra
is a Rust implementation of the Enigma machine that includes the
ability to decrypt ciphertext.
ultra
can be installed from crates.io using Cargo:
$ cargo install ultra
Encrypt a message with rotors 1-4-2
, key setting D-O-G
, and ring setting C-A-T
:
$ ultra --rotor=142 --key=DOG --ring=CAT "The quick brown fox jumps over the lazy dog."
Ntz ntqlz jmwll art bbnow wzqk keq ievk lzo.
Encrypt a message using random Enigma settings:
$ ultra --randomize "The quick brown fox jumps over the lazy dog."
Kxj mcwzf oqgmz pwr vnfqq iwhv wcr qqgt lgd.
(Rotors: 314, Key Setting: NHO, Ring Setting: VTB)
Decrypt the ciphertext generated in the previous example:
$ ultra --decrypt "Kxj mcwzf oqgmz pwr vnfqq iwhv wcr qqgt lgd."
The quick brown fox jumps over the lazy dog.
(Rotors: 314, Key Setting: SZO, Ring Setting: ALB)
Decryption relies on quadgram frequencies to infer the original Enigma machine settings, and as a result, it is quite likely that short messages will be decrypted incorrectly. Additionally, decryption will not work for messages that were encrypted with any plugboard plugs active. See this blog post for a brief overview of the decryption algorithm.
This project's quadgram data and decryption algorithm is based on James Lyons' articles about the Enigma machine.
ultra
is licensed under the MIT License.