Skip to content

Latest commit

 

History

History
27 lines (17 loc) · 2.01 KB

加密算法.md

File metadata and controls

27 lines (17 loc) · 2.01 KB

凯撒密码、多表加密、恩尼格玛——这些加密算法,都用Python实现!

2021年3月9日-10日左右,我用Python初步设计实现了下述加密算法:凯撒密码、多表加密、恩尼格玛。

今日,2021年8月14日,用周末的时间,重新优化了这三种算法。分享出来,供大家参考。


凯撒密码(Caesar_cipher)

比较简单,就是根据特定的一种移动方式,其代码中的参数是method=3者,用新的拉丁字母代替旧的。大家阅读代码即可了解。

多表加密(polyalphabetic_cipher)

稍微繁杂些,借由输入一个特定单词,比如随便输入一个love,从这个单词得到一个关键词索引列表,每个拉丁字母由此对应一个值,以决定字符移动的方式。

恩尼格玛(Enigma)

则极复杂矣。特别的地方有:

  • 将转子对象化为Rotor,获得各转子之加密方式,并且保留其原加密方式,以资对照从而拨动转子(见函数linkAndMoveRotors)。
  • 并设置类变量rotorList,保存全部的转子,这样是为更方便地改变转子之数量并从中获取数据,从而提高代码灵活性。参见函数encipherAndDecipher,可知这种做法使代码更简单,并更灵活。
  • 用函数setPlugboard模拟了插线板。这样一来,明文字符就不可能等於加密字符。另外,设计变量num,是为提高灵活性。
  • encipherAndDecipher是核心的加密函数。函数中的局部变量sign用於确定运行方向。我们知道,在恩尼格玛中,同样的过程,能既加密又解密。注意,索引不可溢出。
  • 函数linkAndMoveRotors实现了转子间依次的带动关系。这里就用到了原加密方式。
  • 单个转子之转动,由函数move实现。
  • 又区分了操作过程是借助机器还是手工,通过M与m来确定。将密码、插线板数据等保存到了本地,可以方便地实现解密。注意,要将密文数据保存至明文文件中,方可解密。