3 个版本 (1 个稳定版)
1.0.0 | 2023 年 1 月 8 日 |
---|---|
0.1.0 | 2022 年 11 月 28 日 |
0.0.1 | 2022 年 11 月 26 日 |
在 密码学 中排名 #1838
21KB
265 行(不包括注释)
playfair-rs - 在 Rust 中实现 Playfair 密码.
最初是我 CS 303:数据库与信息安全课程的一个作业,我想花更多的时间重新实现它。这是我在 Rust 中实现 Playfair 密码 的解决方案。
设计选择
一些实现省略了加密/解密中的字母 'q',一些省略 'j',还有一些将 'i' 等同于 'j'。对于我的实现,我选择了 'i' = 'j',因为这是维基百科文章中的示例所遵循的,并且一个默认使用的 在线 Playfair 密码网站。这使得验证我的实现变得容易。
我还使用了一个 Makefile 来强制对所有函数进行严格的注释,以确保我知道该行和函数正在做什么。此外,多亏了出色的 Rust 生态系统,它可以通过单个 make
命令生成文档。该文档可以在执行 make
命令后的 ./target/doc/playfair_rs/
目录中找到。
我还广泛使用了测试,从关键字生成、矩阵计算、字符位置到 完整集成测试。结合代码中的断言,我有很好的理由相信我的代码是正确的。
示例
您可以在 main.rs 中查看示例,或者这里有一个简单的实现
加密步骤
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
}
解密步骤
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.
}