ultra Build Status crates.io docs.rs License

ultra is a Rust implementation of the [Enigma machine] that includes the ability to decrypt ciphertext.

Installation

ultra can be installed from [crates.io] using Cargo:

$ cargo install ultra

Usage

Encrypt a message with rotors 1-4-2, key setting D-O-G, and ring setting C-A-T:

bash $ 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:

```bash $ ultra --randomize "The quick brown fox jumps over the lazy dog." Kxj mcwzf oqgmz pwr vnfqq iwhv wcr qqgt lgd.

Rotors: 5-2-3 / Key: A-A-G / Ring: N-W-Q / Plugs: CG EZ HW IJ MP TY ```

Attempt to decrypt a piece of ciphertext:

bash $ ultra --decrypt "$(cat ciphertext.txt)" ...

Decryption relies on a combination of [index of coincidence], bigram, and quadgram frequencies to infer the original Enigma machine settings, and as a result, it is quite likely that messages shorter than 500 characters will not come anywhere close to being decrypted correctly.

References

The original version of this project was based on [James Lyons'] articles about the Enigma machine (see [this blog post] for a brief overview). As of version 0.6.0, the decryption algorithm was updated, inspired by [this Computerphile video].

License

ultra is licensed under the MIT License.