Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/taxborn/playfair

A Playfair Cipher implementation in Rust
https://github.com/taxborn/playfair

cipher playfair-cipher rust

Last synced: 5 days ago
JSON representation

A Playfair Cipher implementation in Rust

Awesome Lists containing this project

README

        

# playfair-rs - [Playfair Cipher](https://en.wikipedia.org/wiki/Playfair_cipher) in [Rust](https://www.rust-lang.org/).
Originally was an assignment for my CS 303: Databases and Information Security class,
I wanted to take some more time and implement it again. This is my solution to implementing
the [Playfair Cipher](https://en.wikipedia.org/wiki/Playfair_cipher) in Rust.

## Design choices
Some implementations omit the letter 'q' in encryption/decryption, some omit 'j', and
some equate 'i' to 'j'. For my implementation, I went with 'i' = 'j', since that is
what the Wikipedia article's example followed, and a [random online playfair cipher](https://www.boxentriq.com/code-breaking/playfair-cipher)
website used by default. This allowed for easy verification of my implementation.

I also used a [Makefile](Makefile) to enforce strict commenting of all my functions
to ensure I knew what was going on at that line and function. As well thanks to the awesome
[Rust ecosystem](https://www.rust-lang.org/tools), it enables generation of documentation
with just a single `make` command. That documentation can be found in the `./target/doc/playfair_rs/`
directory, following execution of the `make` command.

I also used testing extensively, for each part from keyword generation, matrix computation,
character location, to [full integration testing](./tests/playfair_tests.rs). Combining this
with assertions in the code, I have a pretty good idea that my code is correct.

## Examples
You can see an example in [main.rs](./src/main.rs), or here is a simple shown implementation:

**Encryption steps:**
```rust
use playfair::{Cipher, Playfair};

// Example from https://en.wikipedia.org/wiki/Playfair_cipher.
fn main() {
let pf = Playfair::new("playfair example");
let out = pf.encrypt("Hide the gold in the tree stump.");

// out = bmodzbxdnabekudmuixmmouvif
}
```

**Decryption steps:**
```rust
use playfair::{Cipher, Playfair};

// Example from https://en.wikipedia.org/wiki/Playfair_cipher.
fn main() {
let pf = Playfair::new("playfair example");
let out = pf.decrypt("bmodzbxdnabekudmuixmmouvif");

// out = hidethegoldinthetrexestump
// NOTE: the extra 'x' here ^ is expected since it was inserted during the encryption process.
// Read more about the Playfair cipher to understand why.
}
```