mirror of
https://github.com/kristoferssolo/cipher-workshop.git
synced 2025-12-31 13:52:29 +00:00
99 lines
2.9 KiB
Markdown
99 lines
2.9 KiB
Markdown
# Cipher Workshop
|
|
|
|
A Rust workspace containing implementations of various cipher algorithms, along with a command-line interface (CLI) and a web interface to interact with them.
|
|
|
|
## Features
|
|
|
|
- **AES Implementation**: AES-128 in ECB and CBC modes
|
|
- **DES Implementation**: DES in ECB mode
|
|
- **Command-Line Interface**: Encrypt and decrypt messages or files using the supported ciphers
|
|
- **Web Interface**: Browser-based encryption with file upload, drag-and-drop, and random key/IV generation
|
|
|
|
## Workspace Structure
|
|
|
|
The `cipher-workshop` workspace is organized into the following crates:
|
|
|
|
- `aes`: Implementation of the AES cipher (ECB and CBC modes)
|
|
- `cipher-core`: Core traits and types for ciphers
|
|
- `cipher-factory`: A factory for creating cipher contexts
|
|
- `cli`: A command-line interface for the ciphers
|
|
- `des`: Implementation of the DES cipher
|
|
- `web`: A web interface built with Leptos
|
|
|
|
## Getting Started
|
|
|
|
### Prerequisites
|
|
|
|
- [Rust](https://www.rust-lang.org/tools/install)
|
|
- [cargo-leptos](https://github.com/leptos-rs/cargo-leptos) (for the web interface)
|
|
- [Node.js](https://nodejs.org/en/download/) (for end-to-end testing)
|
|
|
|
### Building the Project
|
|
|
|
Clone the repository and build the workspace:
|
|
|
|
```bash
|
|
git clone https://github.com/kristofers-solo/cipher-workshop.git
|
|
cd cipher-workshop
|
|
cargo build
|
|
```
|
|
|
|
## Usage
|
|
|
|
### CLI
|
|
|
|
The CLI allows you to encrypt and decrypt messages or files using the supported ciphers.
|
|
|
|
#### AES (ECB mode)
|
|
|
|
```bash
|
|
# Encrypt a message
|
|
cargo run --bin cli -- encrypt -a aes -k 0x2B7E151628AED2A6ABF7158809CF4F3C "Hello World"
|
|
|
|
# Decrypt a message
|
|
cargo run --bin cli -- decrypt -a aes -k 0x2B7E151628AED2A6ABF7158809CF4F3C 0x...
|
|
```
|
|
|
|
#### AES-CBC (with IV)
|
|
|
|
```bash
|
|
# Encrypt a file
|
|
cargo run --bin cli -- encrypt -a aes-cbc -k 0x2B7E151628AED2A6ABF7158809CF4F3C --iv 0x000102030405060708090A0B0C0D0E0F -i input.txt -o output.enc
|
|
|
|
# Decrypt a file
|
|
cargo run --bin cli -- decrypt -a aes-cbc -k 0x2B7E151628AED2A6ABF7158809CF4F3C --iv 0x000102030405060708090A0B0C0D0E0F -i output.enc -o decrypted.txt
|
|
```
|
|
|
|
#### DES
|
|
|
|
```bash
|
|
# Encrypt a message
|
|
cargo run --bin cli -- encrypt -a des -k 0x133457799BBCDFF1 "Hello"
|
|
|
|
# Decrypt a message
|
|
cargo run --bin cli -- decrypt -a des -k 0x133457799BBCDFF1 0x...
|
|
```
|
|
|
|
### Web Interface
|
|
|
|
The web interface provides a user-friendly way to interact with the ciphers, available at: [https://cryptography.kristofers.xyz/](https://cryptography.kristofers.xyz/)
|
|
|
|
Features:
|
|
|
|
- **DES, AES, and AES-CBC** encryption/decryption
|
|
- **Random key and IV generation** using Web Crypto API
|
|
- **File upload** with drag-and-drop support
|
|
- **File download** for encrypted/decrypted output
|
|
- **Multiple output formats**: Hex, Binary, Octal, Text
|
|
|
|
To run the web interface locally:
|
|
|
|
```bash
|
|
cd web
|
|
cargo leptos watch
|
|
```
|
|
|
|
## License
|
|
|
|
This project is licensed under either of the [Apache License, Version 2.0](LICENSE-APACHE) or the [MIT license](LICENSE-MIT), at your option.
|