| Crates.io | cryptan |
| lib.rs | cryptan |
| version | 0.4.2 |
| created_at | 2025-10-03 08:18:52.367168+00 |
| updated_at | 2025-10-13 03:58:11.143103+00 |
| description | A simple crypto playground (Caesar, Morse, ...). |
| homepage | |
| repository | https://github.com/YaseiTanuki/Cryptan |
| max_upload_size | |
| id | 1866337 |
| size | 4,902,425 |
Cryptan is a comprehensive Rust toolkit and CLI for experimenting with various classical ciphers, modern encryption methods, and encoding schemes. It provides both a command-line binary and a reusable library API for cryptographic operations.
This toolkit aims to implement all major types of ciphers and encoding methods, making it a complete resource for learning, experimenting with, and using cryptographic algorithms.
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 = "cryptan").
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").
use cryptan::{CaesarCipher, ClassicalCipher};
fn main() {
let c = CaesarCipher::from_key(3);
let secret = c.encrypt("attack at dawn");
println!("Encrypted: {}", secret);
assert_eq!(secret, "dwwdfn dw gdzq");
let recovered = c.decrypt(&secret);
println!("Decrypted: {}", recovered);
assert_eq!(recovered, "attack at dawn");
println!("✅ Caesar cipher test passed!");
}
For brute-force you get a Vec<DecodedResult> (see src/utils/utils_struct.rs) where each DecodedResult includes text, key, and optional meaningful_ratio.
use cryptan::{CaesarCipher, BruteForce};
fn main() {
let ciphertext = "dwwdfn dw gdzq";
let mut cipher = CaesarCipher::from_key(0);
println!("Attempting brute-force attack on: {}", ciphertext);
let candidates = cipher.bruteforce(ciphertext, Some(0.3));
for (i, candidate) in candidates.iter().enumerate() {
println!("{:02}. Key: {}, Text: '{}', Confidence: {:.3}",
i + 1,
candidate.key,
candidate.text,
candidate.meaningful_ratio.unwrap_or(0.0));
}
}
Cipher-helper/
├── Cargo.toml
├── LICENSE
├── README.md
├── public/
│ └── words.txt
├── src/
│ ├── lib.rs
│ ├── main.rs
│ ├── traits.rs
│ ├── classical/
│ │ └── caesar/
│ ├── encoding/
│ │ └── morse/
│ └── utils/
└── target/
└── ...
This toolkit is designed to eventually support all major cipher types and encoding schemes. The following are planned for future releases:
E(x) = (ax + b) mod m for encryptionContributions welcome. Follow repository conventions:
Format code with cargo fmt.
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 DecodedResult Display impl).
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.
[!WARNING] See DISCLAIMER and RESPONSIBLE_USE for usage guidelines.