#加密 #安全 #字符 #矩阵 #生成 #playfair-cipher

bin+lib playfair

Rust 中实现的 Playfair 密码

3 个版本 (1 个稳定版)

1.0.0 2023 年 1 月 8 日
0.1.0 2022 年 11 月 28 日
0.0.1 2022 年 11 月 26 日

密码学 中排名 #1838

MIT 许可证

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.
}

无运行时依赖