Cryptan
Cryptan is a small Rust toolkit and CLI for experimenting with the classic Caesar cipher. It provides:
- A command-line binary (installed as
caesarviacargo installor run withcargo run). - A reusable library API exposing a builder-style
CaesarCipherand aDecodedResultpayload used by the bruteforce routine.
Features
- Encrypt/decrypt using integer rotation keys (supports negative and >26 keys; rotation is modulo 26).
- Brute-force all 26 rotations and optionally filter results by a "meaningfulness" ratio computed against
public/words.txt.
Requirements
- Rust (edition 2021). Recent rustup-stable releases work (1.70+ is sufficient).
Build and install
From the repository root:
# build & run locally
cargo run -- <subcommand> [args...]
# or install the binary into your cargo bin directory
cargo install --path .
When installed, the binary name comes from Cargo.toml ([[bin]] name = "caesar").
CLI usage
Examples:
# encrypt: cargo run -- encrypt <key:i16> "plain text"
cargo run caesar -- encrypt 3 "attack at dawn"
# decrypt: cargo run -- decrypt <key:i16> "encrypted text"
cargo run caesar -- decrypt 3 "dwwdfn dw gdzq"
# brute-force: cargo run -- brute "encoded text" [threshold:f32]
# threshold is optional; if omitted all candidates are returned (threshold defaults to 0.0)
cargo run caesar -- brute "ftue rcjj" 0.6
Note: cargo run -- passes the following tokens to the binary. If you installed the package with cargo install, run the cryptan binary directly (e.g. cryptan caesar brute "ftue rcjj").
Library usage
Basic Example
use ;
For brute-force you get a Vec<DecodedResult> (see src/utils/utils_struct.rs) where each DecodedResult includes text, key, and optional meaningful_ratio.
Brute-force Example
use ;
Important implementation notes
- CLI: the binary is configured in
Cargo.toml([[bin]] name = "caesar", path = "src/main.rs"). The clap-based CLI is defined insrc/main.rsand exposesencrypt,decrypt, andbrutesubcommands. - Cipher implementation:
src/classical/caesar/caesar.rsprovides theCaesarCiphertype implementing theClassicalCipherandBruteForcetraits (src/traits.rs). - Meaningfulness scoring:
src/utils/utils.rs::meaningful_ratiouses the plain word list loaded frompublic/words.txtviaload_set. - Decoded output formatting:
src/utils/utils_struct.rs::DecodedResultimplementsDisplaywith colored output.
Project layout (partial)
Cipher-helper/
├── Cargo.toml
├── LICENSE
├── README.md
├── public/
│ └── words.txt
├── src/
│ ├── lib.rs
│ ├── main.rs
│ ├── traits.rs
│ ├── classical/ # module: `cryptan::classical`
│ │ └── caesar/ # module: `cryptan::classical::caesar`
│ ├── encoding/ # module: `cryptan::encoding`
│ │ └── morse/ # module: `cryptan::encoding::morse`
│ └── utils/ # module: `cryptan::utils`
└── target/
└── ...
Contributing
Contributions welcome. Follow repository conventions:
- Format code with
cargo fmt. - Run basic checks with
cargo clippyandcargo test(add tests undersrc/ortests/as needed).
License
This crate is licensed under Apache-2.0 (see Cargo.toml).
Acknowledgements & used crates
Thanks to the maintainers of the dwyl/english-words repository for the public word list included at public/words.txt.
Primary crates used in this project:
- clap — Command-line argument parsing and subcommand parsing for the binary (declares CLI, derives parsers from structs).
- colored — Adds ANSI color helpers for terminal output (used by
DecodedResultDisplay impl). - log — Logging facade for libraries and binaries; provides logging macros (
info!,warn!, etc.). - env_logger — A logger implementation that reads log level from environment variables (integrates with
log).
Special thanks to the maintainers and contributors of the linked projects for their time and open-source work — this project benefits from your efforts.