# 介绍

这个项目是基于恩尼格码密码机的原理所实现,实现了恩尼格码密码机的大部分组件。做这个项目单纯是为了好玩,当然有兴趣的也可以把这个项目运用到其他的场景中(比如解谜游戏)。本项目的灵感来自于抖音up主:简客JK (opens new window)

# 关于恩尼格码密码机

恩尼格码 (opens new window)密码机是上世纪二十年代发明的一种电气编码机,本质上是一种扰码设备,将一个输入字符转换为另一个字符输出,在使用相同密匙时两个字符可以相互转换,在二战中被纳粹德国大规模应用于军事通信,并发展出多种改进型。

# 项目指引

本项目实现了恩尼格码密码机除去用于输入输出的键盘与显示板外所有主要的加密部分,包括:

  • 连接板: 用于将两个字母相连,例如A与B相连则按下A输入B,按下B输入A。
  • 转子: 用于转换字符,将一个输入字符转为另一个,一个密码机可以设置多个转子串连以增加加密复杂度,每处理一个字符,转子都将改变一次位置(类似于计数器的方式)。
  • 反射器: 在转子最后连接着反射器,反射器会将输入的字符转换为另一个字符再返回转子。

同时也增加一些改动:

  • 反射器、转子之间不是传递字符而是传递索引,索引将在输入转子之前和离开转子之后转换为字符
  • 增加了输入映射的配置,默认的顺序是A-Z对应0-25,允许自定义,比如打乱或反转序列,在输入时字符将会转换为输入映射所配置的数值作为索引输入转子。
  • 允许配置任意数量的转子(通过传入多组转子设置),可以大幅增加加密的复杂度。
  • 允许输入任何字符,但是仅对英文字母进行加密(后续可能会允许对其他字符进行配置)。

注意:

  • 所有的输入字符都会忽略大小写并被处理成大写字符输出(也许这个设定会在后续版本取消)。

工作流程:

输入字符(同时转子位置+1)->输入映射->转子组->反射器->转子组->输入映射->返回值