2021年3月9日-10日左右,我用Python初步设计实现了下述加密算法:凯撒密码、多表加密、恩尼格玛。
今日,2021年8月14日,用周末的时间,重新优化了这三种算法。分享出来,供大家参考。
比较简单,就是根据特定的一种移动方式,其代码中的参数是method
=3者,用新的拉丁字母代替旧的。大家阅读代码即可了解。
稍微繁杂些,借由输入一个特定单词,比如随便输入一个love
,从这个单词得到一个关键词索引列表,每个拉丁字母由此对应一个值,以决定字符移动的方式。
则极复杂矣。特别的地方有:
- 将转子对象化为
Rotor
,获得各转子之加密方式,并且保留其原加密方式,以资对照从而拨动转子(见函数linkAndMoveRotors
)。 - 并设置类变量
rotorList
,保存全部的转子,这样是为更方便地改变转子之数量并从中获取数据,从而提高代码灵活性。参见函数encipherAndDecipher
,可知这种做法使代码更简单,并更灵活。 - 用函数
setPlugboard
模拟了插线板。这样一来,明文字符就不可能等於加密字符。另外,设计变量num,
是为提高灵活性。 encipherAndDecipher
是核心的加密函数。函数中的局部变量sign
用於确定运行方向。我们知道,在恩尼格玛中,同样的过程,能既加密又解密。注意,索引不可溢出。- 函数
linkAndMoveRotors
实现了转子间依次的带动关系。这里就用到了原加密方式。 - 单个转子之转动,由函数
move
实现。 - 又区分了操作过程是借助机器还是手工,通过M与m来确定。将密码、插线板数据等保存到了本地,可以方便地实现解密。注意,要将密文数据保存至明文文件中,方可解密。