Enigma 机器模拟包。
项目描述
具有 Python 2.7 状态和编码显示的 Enigma 机器模拟器。
目前只为战争年代最广泛使用的机器型号提供支持: I、M3和M4。
功能:封装API
该包提供了从常规规范生成机器配置、检查配置状态、通过在状态之间步进来模拟机器操作以及编码消息的功能:
创建机器配置(参见文档)config_enigma_from_string:
>>> from crypto_enigma import * >>> cfg = EnigmaConfig.config_enigma_from_string(u'B-I-III-I EMO UX.MO.AY 13.04.11')
编码消息(参见文档)enigma_encoding:
>>> cfg.enigma_encoding(u'TESTINGXTESTINGUD') u'OZQKPFLPYZRPYTFVU' >>> cfg.enigma_encoding(u'OZQKPFLPYZRPYTFVU') u'TESTINGXTESTINGUD'
显示配置详细信息(请参阅文档)config_string:
>>> print(cfg.config_string(letter=u'X', format='internal', mark_func=lambda c: '(' + c + ')'))
X > ABCDEFGHIJKLMNOPQRSTUVW(X)YZ
P YBCDEFGHIJKLONMPQRSTXVW(U)AZ UX.MO.AY
1 HCZMRVJPKSUDTQOLWEXN(Y)FAGIB O 05 I
2 KOMQEPVZNXRBDLJHFSUWYACT(G)I M 10 III
3 AXIQJZ(K)RMSUNTOLYDHVBWEGPFC E 19 I
R YRUHQSLDPX(N)GOKMIEBFZCWVJAT B
3 ATZQVYWRCEGOI(L)NXDHJMKSUBPF I
2 VLWMEQYPZOA(N)CIBFDKRXSGTJUH III
1 WZBLRVXAYGIPD(T)OHNEJMKFQSUC I
P YBCDEFGHIJKLONMPQRS(T)XVWUAZ UX.MO.AY
T < CNAUJVQSLEMIKBZRGPHXDFY(T)WO
模拟机器操作(参见文档)print_operation:
>>> cfg.print_operation(message=u'TESTING', show_step=True, mark_func=lambda c: '(' + c + ')')
0000 CNAUJVQSLEMIKBZRGPHXDFYTWO EMO 19 10 05
0001 T > UNXKGVERLYDIQBTWMHZ(O)AFPCJS EMP 19 10 06
0002 E > QTYJ(Z)XUPKDIMLSWHAVNBGROFCE EMQ 19 10 07
0003 S > DMXAPTRWKYINBLUESG(Q)FOZHCJV ENR 19 11 08
0004 T > IUSMHRPEAQTVDYWGJFC(K)BLOZNX ENS 19 11 09
0005 I > WMVXQRLS(P)YOGBTKIEFHNZCADJU ENT 19 11 10
0006 N > WKIQXNRSCVBOY(F)LUDGHZPJAEMT ENU 19 11 11
0007 G > RVPTWS(L)KYXHGNMQCOAFDZBEJIU ENV 19 11 12
观察机器运行 500 步:
>>> cfg.print_operation(steps=500, show_step=True, format='internal', overwrite=True)
功能:命令行
命令行脚本enigma.py提供了 API 的几乎所有功能。
编码消息:
$ enigma.py encode "B-I-III-I EMO UX.MO.AY 13.04.11" "TESTINGXTESTINGUD" OZQKPFLPYZRPYTFVU $ enigma.py encode "B-I-III-I EMO UX.MO.AY 13.04.11" "OZQKPFLPYZRPYTFVU" TESTINGXTESTINGUD
显示配置细节(在命令行帮助中有更详细的解释):
$ enigma.py show "B-I-III-I EMO UX.MO.AY 13.04.11" -l 'X' -H'()' -f internal X > ABCDEFGHIJKLMNOPQRSTUVW(X)YZ P YBCDEFGHIJKLONMPQRSTXVW(U)AZ UX.MO.AY 1 HCZMRVJPKSUDTQOLWEXN(Y)FAGIB O 05 I 2 KOMQEPVZNXRBDLJHFSUWYACT(G)I M 10 III 3 AXIQJZ(K)RMSUNTOLYDHVBWEGPFC E 19 I R YRUHQSLDPX(N)GOKMIEBFZCWVJAT B 3 ATZQVYWRCEGOI(L)NXDHJMKSUBPF I 2 VLWMEQYPZOA(N)CIBFDKRXSGTJUH III 1 WZBLRVXAYGIPD(T)OHNEJMKFQSUC I P YBCDEFGHIJKLONMPQRS(T)XVWUAZ UX.MO.AY T < CNAUJVQSLEMIKBZRGPHXDFY(T)WO
模拟机器操作(在命令行帮助中有更详细的解释):
$ enigma.py run "B-I-III-I EMO UX.MO.AY 13.04.11" -m "TESTING" -t -H'()' 0000 CNAUJVQSLEMIKBZRGPHXDFYTWO EMO 19 10 05 0001 T > UNXKGVERLYDIQBTWMHZ(O)AFPCJS EMP 19 10 06 0002 E > QTYJ(Z)XUPKDIMLSWHAVNBGROFCE EMQ 19 10 07 0003 S > DMXAPTRWKYINBLUESG(Q)FOZHCJV ENR 19 11 08 0004 T > IUSMHRPEAQTVDYWGJFC(K)BLOZNX ENS 19 11 09 0005 I > WMVXQRLS(P)YOGBTKIEFHNZCADJU ENT 19 11 10 0006 N > WKIQXNRSCVBOY(F)LUDGHZPJAEMT ENU 19 11 11 0007 G > RVPTWS(L)KYXHGNMQCOAFDZBEJIU ENV 19 11 12
观察机器运行 500 步:
$ enigma.py run "c-β-VIII-VII-VI QMLI 'UX.MO.AY 01.13.04.11" -s 500 -t -f internal -o
文档
完整的文档可在Read the Docs获得。
命令行文档可作为命令行脚本的帮助获得:
$ enigma.py --help
限制
请注意,用于表示组件(细海军转子)的某些字符的正确显示假定支持 Unicode,而机器状态显示的某些方面取决于对组合 Unicode 的支持。这是一个已知限制,将在未来版本中解决。
另请注意,在使用此包的任何脚本开始时,您应该
from __future__ import unicode_literals
在任何使用 API 的代码之前,或配置 IPython (in ipython_config.py) with
c.InteractiveShellApp.exec_lines += ["from __future__ import unicode_literals"]
或显式提供 Unicode 字符串(例如,在上面的示例中使用u'TESTING')。
备择方案
对于其他 Python Enigma 机器,请参阅:
py-enigma (Python 3)
该软件包基于Haskell 版本,具有基本相同的 API。
发展状况
这个包处于开发的早期阶段,我不能保证当前的 开发版本可以工作。有关计划发布和活动的更多详细信息,请参见计划里程碑列表和未解决问题列表。各种测试版本可用于安装或问题审查,但这些也可能无法按预期工作。