2个不稳定版本
0.2.3 | 2023年11月27日 |
---|---|
0.2.2 |
|
0.1.1 | 2023年11月19日 |
302 在 密码学 中
20KB
351 行
Enigma机
描述
简介
Enigma是一种在二战期间及之后使用的加密机。它使用物理转轮来编码和解码信息。我的实现是针对“Glühlampenmaschine”及其后续型号;包括配线板、转轮和反射器。由于它的复杂性,Enigma机当时被认为是不可能被破解的,但它的密码在现代标准下并不安全。
我的实现
我使用Rust和标准库(std::env)将Enigma机实现为一个命令行工具。我的主要目标是创建一个命令行界面来获得解析参数和标志以配置消息编码的经验。没有其他依赖项。
来源
使用
示例
此示例将“JDPEN XCJJO”解码为“Hello World”。这可以在帮助页面中找到。
./enigma --rotor "EKMFLGDQVZNTOWYHXUSPAIBRCJ" V A --rotor "AJDKSIRUXBLHWTMCQGZNPYFVOE" E A --rotor "BDFHJLCPRTXVZNYEIWGAKMUSQO" Q A --reflector "YR UH QS LD PX NG OK MI EB FZ CW VJ AT" --message "JDPEN XCJJO"
OUTPUT: "HELLO WORLD"
标志
--rotor | -r
使用 --rotor 编码 转换位置
添加并配置转轮。
编码
是转轮的编码。这是一个由26个字符组成的字符串。每个字符都是字母表中的一个字母。一个字母只能使用一次,但可以使用任何顺序。
转换
是将下一个转轮旋转的字母。这是一个单字符。
位置
是转轮的起始位置。这是一个单字符。
你可以有任意多的转轮。
示例
./enigma ... --rotor "EKMFLGDQVZNTOWYHXUSPAIBRCJ" D A --rotor "AJDKSIRUXBLHWTMCQGZNPYFVOE" F B --rotor "BDFHJLCPRTXVZNYEIWGAKMUSQO" E C``
--reflector | -rf
使用 --reflector 对
配置反射器。
PAIRS
表示在反射器中连接的字母对(用于对称加密)。每个对由两个空格分隔的字母组成。每个字母只能使用一次,但可以使用任何顺序。
必须包含反射器
示例
./enigma ... --reflector "AB CD EF GH IJ KL MN OP QR ST UV WX YZ"
--message | -m
使用 --message "MESSAGE"
设置要编码的消息。
MESSAGE
是要编码的消息。这是一串字符。任何非字母字符都将被忽略并传递。
必须包含消息
示例
./enigma ... --message "HELLO WORLD"
--plugboard | -pb
使用 --plugboard "PAIRS"
来配置插件板。
PAIRS
表示在插件板上连接的字母对。每个对由两个空格分隔的字母组成。每个字母只能使用一次,但可以使用任何顺序。您可以拥有任意数量的对。
插件板是可选的
示例
./enigma ... --plugboard "AB CD EF GH IJ KL MN OP QR ST UV WX YZ"
--help | -h
使用 --help
打印帮助页面。
所有其他参数将被忽略
示例
./enigma --help
--state | -s
使用 --state
打印编码消息后恩尼格玛机的最终状态。
这是可选的
示例
./enigma ... --state
错误
我尝试使错误消息信息丰富。我不会在这里显示所有错误消息,但这是一个例子
$ ./enigma wooooop -rotor abcdefghijklmnopqrstuvwxyz a y -rotor abc a a
["$", "wooooop", "-rotor", "abcdefghijklmnopqrstuvwxyz", "a", "y", "-rotor", "abc", "a", "a"]
Error parsing rotor 2.
Encoding must be 26 characters long.
构建
安装
克隆仓库,构建和运行。 (需要 Cargo)
$ git clone https://GitHub.com/Andrew-McCall/enigma-rs.git
$ cd enigma-rs
$ cargo build
Cargo 构建
使用 cargo build --release
构建二进制文件。
$ ./enigma [flags]
二进制文件将位于 target/release/enigma
。
Cargo 运行
使用 cargo run --release -- [flags]
使用一个命令构建和运行二进制文件。
许可证
MIT 许可证 版权所有 (c) 2023 Andrew McCall