denismaggior8/enigma-python
GitHub: denismaggior8/enigma-python
一个高保真模拟二战 Enigma 密码机多种型号的 Python 库,通过真实历史数据验证并支持灵活配置与扩展。
Stars: 15 | Forks: 1
# Enigma Python 库
## 关于
欢迎使用 **enigmapython**,这是一个旨在模拟二战期间传奇的 Enigma 密码机的 Python 包。**enigmapython** 忠实地还原了 Enigma 机器,让用户能够探索和理解这台历史设备的运作方式。
该项目已在 [Wikipedia](https://en.wikipedia.org/wiki/List_of_Enigma_machine_simulators) 上被列为全球公认的 Enigma 模拟器,并因其历史准确性而备受赞誉。 ## 主要功能 - **灵活的配置**:**enigmapython** 允许自定义 Enigma 机器的配置,使用户能够尝试不同的转子设置、反射器和环位置。 - **易于扩展**:**enigmapython** 设计为易于扩展,允许开发者添加新功能或增强现有实现。 - **简单却忠实**:不要被它的简单所迷惑;**enigmapython** 100% 实现了多种 Enigma 机器模型的算法,不仅可以解密由真实 Enigma 机器加密的消息,反之亦然。 ## Enigma 机制 有关转子运动和步进逻辑(包括伪代码)的详细描述,请参阅 [Enigma 机制](./docs/mechanics.md)文档。 ## 历史准确性与验证 **enigmapython** 经过真实历史数据的严格测试,以确保最大程度的准确性。 - [1930 年真实的德国陆军测试消息](https://cryptocellar.org/enigma/e-message-1930.html):由 Frode Weierud 的 CryptoCellar 记录,此测试验证了 **Enigma I** 的实现是否正确处理了转子、环设置和接线板连接之间的复杂交互,与原始机器完全一致。详情请参阅[对应的单元测试](https://github.com/denismaggior8/enigma-python/blob/master/tests/Enigma1930_tests.py)。 - [真实的 U-534 M4 消息 P1030700](https://enigma.hoerenberg.com/index.php?cat=The%20U534%20messages&page=P1030700):一条来自 U-534 潜艇(1945 年 5 月)的消息,针对历史截获信息验证了 **Enigma M4** 的实现(包括希腊转子和薄反射器)。详情请参阅[对应的单元测试](https://github.com/denismaggior8/enigma-python/blob/master/tests/EnigmaM4_U534_tests.py)。 - [Enigma T (Tirpitz) 记录与“Finnery”程序测试](https://github.com/denismaggior8/enigma-python/blob/master/tests/EnigmaT_transcript_tests.py):针对真实的二战德日联合海军截获信息以及 Frode Weierud 的 CryptoCellar 上记录的程序,验证了 **Enigma T** 机器的实现。 - **“Finnery”程序**:模拟了历史上的战时传输程序,操作员在处理完每个 5 字母组后,手动将可设置的反射器(`ReflectorUKW_EnigmaT`)在字母表上推进一位。 - **截获记录**:包含了 **消息 A**(DAN C" C", 1814/6/27)和 **消息 B**(DAN C" C", 1947/6/28)真实的战时密文,这些密文于 1944 年 3 月 6 日发送给日本潜艇 *Gimmatzu*,为测试针对真实截获信息的解密提供了经过验证的模板。详情请参阅[对应的记录单元测试](https://github.com/denismaggior8/enigma-python/blob/master/tests/EnigmaT_transcript_tests.py)。 ## 机器实现 已实现以下 Enigma 机器模型(及其转子、反射器和接线板): ### Enigma B (瑞典, s/n: A-133)* | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | ETW (passthrough) | abcdefghijklmnopqrstuvxyzåäö | N/A | ✅ | | Rotor I | psbgöxqjdhoäucfrtezvåinlymka | ä | ✅ | | Rotor II | chnsyöadmotrzxbäigåekqupflvj | ä | ✅ | | Rotor III | åvqiaäxrjbözspcfyunthdomekgl | ä | ✅ | | Reflector UKW | ldgbäncpskjavfzhxuiårmqöotey | N/A | ✅ | *鉴于该型号的稀有性以及现有文档/模拟器的匮乏,尽管我期望其加密一致性与较新的型号相当,但我未能如愿对其进行充分的测试。 ### Enigma K (商用 Enigma) | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | ETW "QWERTZ" | qwertzuioasdfghjkpyxcvbnml | N/A | ✅ | | Rotor I | lpgszmhaeoqkvxrfybutnicjdw | y | ✅ | | Rotor II | slvgbtfxjqohewirzyamkpcndu | e | ✅ | | Rotor III | cjgdpshkturawzxfmynqobvlie | n | ✅ | | Reflector UKW | imetcgfraysqbzxwlhkdvupojn | N/A | ✅ | ### Enigma K 瑞士 | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | ETW "QWERTZ" | qwertzuioasdfghjkpyxcvbnml | N/A | ✅ | | Rotor I | pezuohxscvfmtbglrinqjwaydk | y | ✅ | | Rotor II | zouesydkfwpciqxhmvblgnjrat | e | ✅ | | Rotor III | ehrvxgaobqusimzflynwktpdjc | n | ✅ | | Reflector UKW | imetcgfraysqbzxwlhkdvupojn | N/A | ✅ | ### Enigma D (商用 Enigma) | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | ETW "QWERTZ" | qwertzuioasdfghjkpyxcvbnml | N/A | ✅ | | Rotor I | lpgszmhaeoqkvxrfybutnicjdw | z* | ✅ | | Rotor II | slvgbtfxjqohewirzyamkpcndu | z* | ✅ | | Rotor III | cjgdpshkturawzxfmynqobvlie | z* | ✅ | | Reflector UKW | imetcgfraysqbzxwlhkdvupojn | N/A | ✅ | *当 ringstellung 为 0 (A) 时,Enigma D 的转子在 Z 处发生步进;否则,步进位置使用公式 `turnover = (ringstellung + 1) % 26` 计算。 ### Enigma Z (Z30 Mark I)* 与其他机器型号相比,该型号加密的是数字而非字母。 | 扰频器 | 接线 | 步进点 | 已实现 | |------- |----------------------------|-------|-------------| | ETW (passthrough) | 1234567890 | N/A | ✅ | | Rotor I | 6418270359 | 9 | ✅ | | Rotor II | 5841097632 | 9 | ✅ | | Rotor III | 3581620794 | 9 | ✅ | | Reflector UKW | 5079183642 | N/A | ✅ | *鉴于该型号的稀有性以及现有文档/模拟器的匮乏,尽管我期望其加密一致性与较新的型号相当,但我未能如愿对其进行充分的测试。 ### Enigma I | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | Plugboard (passthrough+swappable) | N/A | N/A | ✅ | | ETW (passthrough) | abcdefghijklmnopqrstuvwxyz | N/A | ✅ | | Rotor I | ekmflgdqvzntowyhxuspaibrcj | q | ✅ | | Rotor II | ajdksiruxblhwtmcqgznpyfvoe | e | ✅ | | Rotor III | bdfhjlcprtxvznyeiwgakmusqo | v | ✅ | | Reflector A | ejmzalyxvbwfcrquontspikhgd | N/A | ✅ | | Reflector B | yruhqsldpxngokmiebfzcwvjat | N/A | ✅ | | Reflector C | fvpjiaoyedrzxwgctkuqsbnmhl | N/A | ✅ | ### Enigma I 挪威 (Norenigma) | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | Plugboard (passthrough+swappable) | N/A | N/A | ✅ | | ETW (passthrough) | abcdefghijklmnopqrstuvwxyz | N/A | ✅ | | Rotor I | wtokasuyvrbxjhqcpzefmdinlg | q | ✅ | | Rotor II | gjlpubswemctqvhxaofzdrkyni | e | ✅ | | Rotor III | jwfmhnbpusdytixvzgrqlaoekc | v | ✅ | | Rotor IV | fgzjmvxepbwshqtliudykcnrao | j | ✅ | | Rotor V | hejxqotzbvfdascilwpgynmurk | z | ✅ | | Reflector UKW | mowjypuxndsraibfvlkzgqchet | N/A | ✅ | ### Enigma I Sondermaschine (特殊机器) | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | Plugboard (passthrough+swappable) | N/A | N/A | ✅ | | ETW (passthrough) | abcdefghijklmnopqrstuvwxyz | N/A | ✅ | | Rotor I | veosirzujdqckgwypnxaflthmb | q | ✅ | | Rotor II | uemoatqlshpkcyfwjzbgvxidnr | e | ✅ | | Rotor III | tzhxmbsipnurjfdkeqvcwglaoy | v | ✅ | | Reflector UKW | ciagsndrbytpzfulvhekoqxwjm | N/A | ✅ | ### Enigma M3 | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | Plugboard (passthrough+swappable) | N/A | N/A | ✅ | | ETW (passthrough) | abcdefghijklmnopqrstuvwxyz | N/A | ✅ | | Rotor I | ekmflgdqvzntowyhxuspaibrcj | q | ✅ | | Rotor II ajdksiruxblhwtmcqgznpyfvoe | e | ✅ | | Rotor III | bdfhjlcprtxvznyeiwgakmusqo | v | ✅ | | Rotor IV | esovpzjayquirhxlnftgkdcmwb | j | ✅ | | Rotor V | vzbrgityupsdnhlxawmjqofeck | z | ✅ | | Rotor VI | jpgvoumfyqbenhzrdkasxlictw | m, z | ✅ | | Rotor VII | nzjhgrcxmyswboufaivlpekqdt | m, z | ✅ | | Rotor VIII | fkqhtlxocbjspdzramewniuygv | m, z | ✅ | | Reflector B | yruhqsldpxngokmiebfzcwvjat | N/A | ✅ | | Reflector C | fvpjiaoyedrzxwgctkuqsbnmhl | N/A | ✅ | ### Enigma M4 | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | Plugboard (passthrough+swappable) | N/A | N/A | ✅ | | ETW (passthrough) | abcdefghijklmnopqrstuvwxyz | N/A | ✅ | | Rotor I | ekmflgdqvzntowyhxuspaibrcj | q | ✅ | | Rotor II | ajdksiruxblhwtmcqgznpyfvoe | e | ✅ | | Rotor III | bdfhjlcprtxvznyeiwgakmusqo | v | ✅ | | Rotor IV | esovpzjayquirhxlnftgkdcmwb | j | ✅ | | Rotor V | vzbrgityupsdnhlxawmjqofeck | z | ✅ | | Rotor VI | jpgvoumfyqbenhzrdkasxlictw | m, z | ✅ | | Rotor VII | nzjhgrcxmyswboufaivlpekqdt | m, z | ✅ | | Rotor VIII | fkqhtlxocbjspdzramewniuygv | m, z | ✅ | | Beta | leyjvcnixwpbqmdrtakzgfuhos | N/A | ✅ | | Gamma | fsokanuerhmbtiycwlqpzxvgjd | N/A | ✅ | | Reflector B Thin | enkqauywjicopblmdxzvfthrgs | N/A | ✅ | | Reflector C Thin | rdobjntkvehmlfcwzaxgyipsuq | N/A | ✅ | ### Enigma T (Tirpitz) | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | ETW | kzrouqhyaigblwvstdxfpnmcje | N/A | ✅ | | Rotor I | kptyuelocvgrfqdanjmbswhzxi | w, z, e, k, q | ✅ | | Rotor II | uphzlweqmtdjxcaksoigvbyfnr | w, z, f, l, r | ✅ | | Rotor III | qudlyrfekonvzaxwhmgpjbsict | w, z, e, k, q | ✅ | | Rotor IV | ciwtbkxnrespflydagvhuojzm | w, z, f, l, r | ✅ | | Rotor V | uaxgisnjbverdylfzwtpckohmq | y, c, f, k, r | ✅ | | Rotor VI | xfuzgalvhcnysewqtdmrbkpioj | x, e, i, m, q | ✅ | | Rotor VII | bjvftxplnayozikwgdqeruchsm | y, c, f, k, r | ✅ | | Rotor VIII | ymtpnzhwkodajxeluvgcbisfr | x, e, i, m, q | ✅ | | Reflector UKW-T (settable) | gekpbtaumocniljdxzyfhwvqsr | N/A | ✅ | ### 自定义机器 | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | Plugboard (passthrough+swappable) | N/A | N/A | ✅ | | ETW (Entry Wheel) | 自定义 | N/A | ✅ | | Rotor | 自定义 | 自定义 | ✅ | | Reflector | 自定义 | N/A | ✅ | 您可以通过手动实例化基础组件来创建一台完全自定义的 Enigma 机器。这允许您定义自定义字母表、接线和步进位置。 ``` from enigmapython.Enigma import Enigma from enigmapython.Rotor import Rotor from enigmapython.Reflector import Reflector from enigmapython.SwappablePlugboard import SwappablePlugboard from enigmapython.Etw import Etw from enigmapython.Alphabets import Alphabets # 1. 定义 alphabet alphabet = Alphabets.lookup.get("latin_i18n_26chars_lowercase") # 2. 创建自定义 rotors # Parameters: wiring, turnover_indexes, alphabet, initial_position, ring_setting rotor1 = Rotor("ekmflgdqvzntowyhxuspaibrcj", [16], alphabet, 0, 0) # Turnover at 'q' rotor2 = Rotor("ajdksiruxblhwtmcqgznpyfvoe", [4], alphabet, 0, 0) # Turnover at 'e' rotor3 = Rotor("bdfhjlcprtxvznyeiwgakmusqo", [21], alphabet, 0, 0) # Turnover at 'v' # 3. 创建自定义 reflector reflector = Reflector("yruhqsldpxngokmiebfzcwvjat", alphabet) # 4. 创建其他组件 # 可交换的 plugboard 允许您连接字母对 plugboard = SwappablePlugboard(alphabet=alphabet) plugboard.swap("a", "z") # Example: swap 'a' with 'z' etw = Etw(alphabet, alphabet) # Passthrough ETW using alphabet as wiring # 5. 组装 Enigma machine engine = Enigma(plugboard, [rotor1, rotor2, rotor3], reflector, etw, auto_increment_rotors=True, alphabet=alphabet) # 6. 加密/解密 cipher = engine.input_string("hello") print(f"Ciphertext: {cipher}") # Outputs: mfnca ``` ## 前置条件 - Python 3.11 - 克隆此代码库,检出所需的分支/标签并安装依赖项(`pip install -r requirements.txt`),或直接使用 `pip install enigmapython` 从 PyPI 安装 ## 快速开始 从 PyPI 安装该包(`pip install enigmapython`)并探索 [示例](https://github.com/denismaggior8/enigma-python/tree/master/examples)文件夹中的内容即可开始使用。 ## 文档 完整的 API 文档可在 [ReadTheDocs](https://enigmapython.readthedocs.io/) 上获取。 了解更多详情,您还可以查阅[本地文档](./docs/README.md)、示例和代码注释。 ## 已知实现 以下列表包含了所有使用 **enigmapython** API 的已知 Enigma 模拟器。 - [Enigma TUI](https://github.com/denismaggior8/enigma-tui)。**Enigma TUI** 是一个用于 Enigma 机器的**终端**用户**界面**(**T**erminal **U**ser **I**nterface),允许您在终端中模拟不同的 Enigma 机器型号。它采用 **enigmapython** 作为 Enigma 引擎。
- [MicroPython Enigma Python](https://github.com/denismaggior8/micropython-enigma-python)。**MicroPython Enigma Python** 是一个旨在将 Enigma Python 库引入运行 MicroPython 的嵌入式设备的附属项目。它已被 https://awesome-micropython.com/#historical 引用,这是精选的最佳 MicroPython 库列表中的加密/历史(Cryptography/Historical)部分。
- [Retrocampus BBS Enigma 模拟器](https://retrocampus.com/bbs/)。连接到 BBS 后,输入 E 即可访问一台基于 **enigmapython** 作为后端的 Enigma I 密码机。
- [最小的 Enigma M4 模拟器](https://smallest-enigma.org)。**最小的 Enigma M4 模拟器**是一项技术规范和微型 Enigma M4 模拟器的世界纪录尝试,利用了 **enigmapython** 在微型嵌入式设备上的 MicroPython 兼容性。
- [Enigma Python MCP Server](https://github.com/denismaggior8/enigma-python-mcp)。**Enigma Python MCP Server** 是一个 Model Context Protocol (MCP) 服务器,它将 **enigmapython** 加密引擎作为工具暴露给 AI 助手,允许 LLM(例如 Claude)像二战期间那样原生地加密和解密消息。
如果您在项目(无论是公开的还是未公开的)中利用了 **enigmapython** API,请发邮件至 __denis.maggiorotto[at]gmail.com__,我会很乐意将您列在这里。 ## 致谢/参考 - 早期使用 Python 和 Enigma 进行实验的记录(本仓库的起源)可以在这里找到:https://github.com/denismaggior8/enigma-cypher - 转子接线取自 **Crypto Museum**,链接如下 https://www.cryptomuseum.com/crypto/enigma/wiring.htm - 感谢 - Piotte13 https://piotte13.github.io/enigma-cipher/ - Cryptii https://cryptii.com - PyEnigma https://pypi.org/project/pyenigma/ - 101 computing https://www.101computing.net/enigma-machine-emulator/ - DenCode Enigma simulator https://dencode.com/cipher/enigma - Daniel Palloks 编写的 Javascript/HTML 版本的 Enigma 模拟 https://people.physik.hu-berlin.de/~palloks/js/enigma/index_en.html - Daniel Palloks 编写的 Javascript/HTML 版本的 Enigma B A133 模拟 https://people.physik.hu-berlin.de/~palloks/js/enigma/enigma-a133_v261_en.html - Daniel Palloks 编写的 Javascript/HTML 版本的 Enigma Z 模拟 https://people.physik.hu-berlin.de/~palloks/js/enigma/enigma-z_v262b_en.html 感谢他们帮助我测试了所生成密文的正确性。 ## 支持 觉得它有用/有趣/有教育意义吗?请考虑 [](https://www.buymeacoffee.com/denismaggior8) 或 [](https://github.com/denismaggior8/enigma-python)
该项目已在 [Wikipedia](https://en.wikipedia.org/wiki/List_of_Enigma_machine_simulators) 上被列为全球公认的 Enigma 模拟器,并因其历史准确性而备受赞誉。 ## 主要功能 - **灵活的配置**:**enigmapython** 允许自定义 Enigma 机器的配置,使用户能够尝试不同的转子设置、反射器和环位置。 - **易于扩展**:**enigmapython** 设计为易于扩展,允许开发者添加新功能或增强现有实现。 - **简单却忠实**:不要被它的简单所迷惑;**enigmapython** 100% 实现了多种 Enigma 机器模型的算法,不仅可以解密由真实 Enigma 机器加密的消息,反之亦然。 ## Enigma 机制 有关转子运动和步进逻辑(包括伪代码)的详细描述,请参阅 [Enigma 机制](./docs/mechanics.md)文档。 ## 历史准确性与验证 **enigmapython** 经过真实历史数据的严格测试,以确保最大程度的准确性。 - [1930 年真实的德国陆军测试消息](https://cryptocellar.org/enigma/e-message-1930.html):由 Frode Weierud 的 CryptoCellar 记录,此测试验证了 **Enigma I** 的实现是否正确处理了转子、环设置和接线板连接之间的复杂交互,与原始机器完全一致。详情请参阅[对应的单元测试](https://github.com/denismaggior8/enigma-python/blob/master/tests/Enigma1930_tests.py)。 - [真实的 U-534 M4 消息 P1030700](https://enigma.hoerenberg.com/index.php?cat=The%20U534%20messages&page=P1030700):一条来自 U-534 潜艇(1945 年 5 月)的消息,针对历史截获信息验证了 **Enigma M4** 的实现(包括希腊转子和薄反射器)。详情请参阅[对应的单元测试](https://github.com/denismaggior8/enigma-python/blob/master/tests/EnigmaM4_U534_tests.py)。 - [Enigma T (Tirpitz) 记录与“Finnery”程序测试](https://github.com/denismaggior8/enigma-python/blob/master/tests/EnigmaT_transcript_tests.py):针对真实的二战德日联合海军截获信息以及 Frode Weierud 的 CryptoCellar 上记录的程序,验证了 **Enigma T** 机器的实现。 - **“Finnery”程序**:模拟了历史上的战时传输程序,操作员在处理完每个 5 字母组后,手动将可设置的反射器(`ReflectorUKW_EnigmaT`)在字母表上推进一位。 - **截获记录**:包含了 **消息 A**(DAN C" C", 1814/6/27)和 **消息 B**(DAN C" C", 1947/6/28)真实的战时密文,这些密文于 1944 年 3 月 6 日发送给日本潜艇 *Gimmatzu*,为测试针对真实截获信息的解密提供了经过验证的模板。详情请参阅[对应的记录单元测试](https://github.com/denismaggior8/enigma-python/blob/master/tests/EnigmaT_transcript_tests.py)。 ## 机器实现 已实现以下 Enigma 机器模型(及其转子、反射器和接线板): ### Enigma B (瑞典, s/n: A-133)* | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | ETW (passthrough) | abcdefghijklmnopqrstuvxyzåäö | N/A | ✅ | | Rotor I | psbgöxqjdhoäucfrtezvåinlymka | ä | ✅ | | Rotor II | chnsyöadmotrzxbäigåekqupflvj | ä | ✅ | | Rotor III | åvqiaäxrjbözspcfyunthdomekgl | ä | ✅ | | Reflector UKW | ldgbäncpskjavfzhxuiårmqöotey | N/A | ✅ | *鉴于该型号的稀有性以及现有文档/模拟器的匮乏,尽管我期望其加密一致性与较新的型号相当,但我未能如愿对其进行充分的测试。 ### Enigma K (商用 Enigma) | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | ETW "QWERTZ" | qwertzuioasdfghjkpyxcvbnml | N/A | ✅ | | Rotor I | lpgszmhaeoqkvxrfybutnicjdw | y | ✅ | | Rotor II | slvgbtfxjqohewirzyamkpcndu | e | ✅ | | Rotor III | cjgdpshkturawzxfmynqobvlie | n | ✅ | | Reflector UKW | imetcgfraysqbzxwlhkdvupojn | N/A | ✅ | ### Enigma K 瑞士 | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | ETW "QWERTZ" | qwertzuioasdfghjkpyxcvbnml | N/A | ✅ | | Rotor I | pezuohxscvfmtbglrinqjwaydk | y | ✅ | | Rotor II | zouesydkfwpciqxhmvblgnjrat | e | ✅ | | Rotor III | ehrvxgaobqusimzflynwktpdjc | n | ✅ | | Reflector UKW | imetcgfraysqbzxwlhkdvupojn | N/A | ✅ | ### Enigma D (商用 Enigma) | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | ETW "QWERTZ" | qwertzuioasdfghjkpyxcvbnml | N/A | ✅ | | Rotor I | lpgszmhaeoqkvxrfybutnicjdw | z* | ✅ | | Rotor II | slvgbtfxjqohewirzyamkpcndu | z* | ✅ | | Rotor III | cjgdpshkturawzxfmynqobvlie | z* | ✅ | | Reflector UKW | imetcgfraysqbzxwlhkdvupojn | N/A | ✅ | *当 ringstellung 为 0 (A) 时,Enigma D 的转子在 Z 处发生步进;否则,步进位置使用公式 `turnover = (ringstellung + 1) % 26` 计算。 ### Enigma Z (Z30 Mark I)* 与其他机器型号相比,该型号加密的是数字而非字母。 | 扰频器 | 接线 | 步进点 | 已实现 | |------- |----------------------------|-------|-------------| | ETW (passthrough) | 1234567890 | N/A | ✅ | | Rotor I | 6418270359 | 9 | ✅ | | Rotor II | 5841097632 | 9 | ✅ | | Rotor III | 3581620794 | 9 | ✅ | | Reflector UKW | 5079183642 | N/A | ✅ | *鉴于该型号的稀有性以及现有文档/模拟器的匮乏,尽管我期望其加密一致性与较新的型号相当,但我未能如愿对其进行充分的测试。 ### Enigma I | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | Plugboard (passthrough+swappable) | N/A | N/A | ✅ | | ETW (passthrough) | abcdefghijklmnopqrstuvwxyz | N/A | ✅ | | Rotor I | ekmflgdqvzntowyhxuspaibrcj | q | ✅ | | Rotor II | ajdksiruxblhwtmcqgznpyfvoe | e | ✅ | | Rotor III | bdfhjlcprtxvznyeiwgakmusqo | v | ✅ | | Reflector A | ejmzalyxvbwfcrquontspikhgd | N/A | ✅ | | Reflector B | yruhqsldpxngokmiebfzcwvjat | N/A | ✅ | | Reflector C | fvpjiaoyedrzxwgctkuqsbnmhl | N/A | ✅ | ### Enigma I 挪威 (Norenigma) | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | Plugboard (passthrough+swappable) | N/A | N/A | ✅ | | ETW (passthrough) | abcdefghijklmnopqrstuvwxyz | N/A | ✅ | | Rotor I | wtokasuyvrbxjhqcpzefmdinlg | q | ✅ | | Rotor II | gjlpubswemctqvhxaofzdrkyni | e | ✅ | | Rotor III | jwfmhnbpusdytixvzgrqlaoekc | v | ✅ | | Rotor IV | fgzjmvxepbwshqtliudykcnrao | j | ✅ | | Rotor V | hejxqotzbvfdascilwpgynmurk | z | ✅ | | Reflector UKW | mowjypuxndsraibfvlkzgqchet | N/A | ✅ | ### Enigma I Sondermaschine (特殊机器) | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | Plugboard (passthrough+swappable) | N/A | N/A | ✅ | | ETW (passthrough) | abcdefghijklmnopqrstuvwxyz | N/A | ✅ | | Rotor I | veosirzujdqckgwypnxaflthmb | q | ✅ | | Rotor II | uemoatqlshpkcyfwjzbgvxidnr | e | ✅ | | Rotor III | tzhxmbsipnurjfdkeqvcwglaoy | v | ✅ | | Reflector UKW | ciagsndrbytpzfulvhekoqxwjm | N/A | ✅ | ### Enigma M3 | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | Plugboard (passthrough+swappable) | N/A | N/A | ✅ | | ETW (passthrough) | abcdefghijklmnopqrstuvwxyz | N/A | ✅ | | Rotor I | ekmflgdqvzntowyhxuspaibrcj | q | ✅ | | Rotor II ajdksiruxblhwtmcqgznpyfvoe | e | ✅ | | Rotor III | bdfhjlcprtxvznyeiwgakmusqo | v | ✅ | | Rotor IV | esovpzjayquirhxlnftgkdcmwb | j | ✅ | | Rotor V | vzbrgityupsdnhlxawmjqofeck | z | ✅ | | Rotor VI | jpgvoumfyqbenhzrdkasxlictw | m, z | ✅ | | Rotor VII | nzjhgrcxmyswboufaivlpekqdt | m, z | ✅ | | Rotor VIII | fkqhtlxocbjspdzramewniuygv | m, z | ✅ | | Reflector B | yruhqsldpxngokmiebfzcwvjat | N/A | ✅ | | Reflector C | fvpjiaoyedrzxwgctkuqsbnmhl | N/A | ✅ | ### Enigma M4 | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | Plugboard (passthrough+swappable) | N/A | N/A | ✅ | | ETW (passthrough) | abcdefghijklmnopqrstuvwxyz | N/A | ✅ | | Rotor I | ekmflgdqvzntowyhxuspaibrcj | q | ✅ | | Rotor II | ajdksiruxblhwtmcqgznpyfvoe | e | ✅ | | Rotor III | bdfhjlcprtxvznyeiwgakmusqo | v | ✅ | | Rotor IV | esovpzjayquirhxlnftgkdcmwb | j | ✅ | | Rotor V | vzbrgityupsdnhlxawmjqofeck | z | ✅ | | Rotor VI | jpgvoumfyqbenhzrdkasxlictw | m, z | ✅ | | Rotor VII | nzjhgrcxmyswboufaivlpekqdt | m, z | ✅ | | Rotor VIII | fkqhtlxocbjspdzramewniuygv | m, z | ✅ | | Beta | leyjvcnixwpbqmdrtakzgfuhos | N/A | ✅ | | Gamma | fsokanuerhmbtiycwlqpzxvgjd | N/A | ✅ | | Reflector B Thin | enkqauywjicopblmdxzvfthrgs | N/A | ✅ | | Reflector C Thin | rdobjntkvehmlfcwzaxgyipsuq | N/A | ✅ | ### Enigma T (Tirpitz) | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | ETW | kzrouqhyaigblwvstdxfpnmcje | N/A | ✅ | | Rotor I | kptyuelocvgrfqdanjmbswhzxi | w, z, e, k, q | ✅ | | Rotor II | uphzlweqmtdjxcaksoigvbyfnr | w, z, f, l, r | ✅ | | Rotor III | qudlyrfekonvzaxwhmgpjbsict | w, z, e, k, q | ✅ | | Rotor IV | ciwtbkxnrespflydagvhuojzm | w, z, f, l, r | ✅ | | Rotor V | uaxgisnjbverdylfzwtpckohmq | y, c, f, k, r | ✅ | | Rotor VI | xfuzgalvhcnysewqtdmrbkpioj | x, e, i, m, q | ✅ | | Rotor VII | bjvftxplnayozikwgdqeruchsm | y, c, f, k, r | ✅ | | Rotor VIII | ymtpnzhwkodajxeluvgcbisfr | x, e, i, m, q | ✅ | | Reflector UKW-T (settable) | gekpbtaumocniljdxzyfhwvqsr | N/A | ✅ | ### 自定义机器 | 扰频器 | 接线 | 步进点 | 已实现 | |------- |---------------------------- |------- |------------- | | Plugboard (passthrough+swappable) | N/A | N/A | ✅ | | ETW (Entry Wheel) | 自定义 | N/A | ✅ | | Rotor | 自定义 | 自定义 | ✅ | | Reflector | 自定义 | N/A | ✅ | 您可以通过手动实例化基础组件来创建一台完全自定义的 Enigma 机器。这允许您定义自定义字母表、接线和步进位置。 ``` from enigmapython.Enigma import Enigma from enigmapython.Rotor import Rotor from enigmapython.Reflector import Reflector from enigmapython.SwappablePlugboard import SwappablePlugboard from enigmapython.Etw import Etw from enigmapython.Alphabets import Alphabets # 1. 定义 alphabet alphabet = Alphabets.lookup.get("latin_i18n_26chars_lowercase") # 2. 创建自定义 rotors # Parameters: wiring, turnover_indexes, alphabet, initial_position, ring_setting rotor1 = Rotor("ekmflgdqvzntowyhxuspaibrcj", [16], alphabet, 0, 0) # Turnover at 'q' rotor2 = Rotor("ajdksiruxblhwtmcqgznpyfvoe", [4], alphabet, 0, 0) # Turnover at 'e' rotor3 = Rotor("bdfhjlcprtxvznyeiwgakmusqo", [21], alphabet, 0, 0) # Turnover at 'v' # 3. 创建自定义 reflector reflector = Reflector("yruhqsldpxngokmiebfzcwvjat", alphabet) # 4. 创建其他组件 # 可交换的 plugboard 允许您连接字母对 plugboard = SwappablePlugboard(alphabet=alphabet) plugboard.swap("a", "z") # Example: swap 'a' with 'z' etw = Etw(alphabet, alphabet) # Passthrough ETW using alphabet as wiring # 5. 组装 Enigma machine engine = Enigma(plugboard, [rotor1, rotor2, rotor3], reflector, etw, auto_increment_rotors=True, alphabet=alphabet) # 6. 加密/解密 cipher = engine.input_string("hello") print(f"Ciphertext: {cipher}") # Outputs: mfnca ``` ## 前置条件 - Python 3.11 - 克隆此代码库,检出所需的分支/标签并安装依赖项(`pip install -r requirements.txt`),或直接使用 `pip install enigmapython` 从 PyPI 安装 ## 快速开始 从 PyPI 安装该包(`pip install enigmapython`)并探索 [示例](https://github.com/denismaggior8/enigma-python/tree/master/examples)文件夹中的内容即可开始使用。 ## 文档 完整的 API 文档可在 [ReadTheDocs](https://enigmapython.readthedocs.io/) 上获取。 了解更多详情,您还可以查阅[本地文档](./docs/README.md)、示例和代码注释。 ## 已知实现 以下列表包含了所有使用 **enigmapython** API 的已知 Enigma 模拟器。 - [Enigma TUI](https://github.com/denismaggior8/enigma-tui)。**Enigma TUI** 是一个用于 Enigma 机器的**终端**用户**界面**(**T**erminal **U**ser **I**nterface),允许您在终端中模拟不同的 Enigma 机器型号。它采用 **enigmapython** 作为 Enigma 引擎。
- [MicroPython Enigma Python](https://github.com/denismaggior8/micropython-enigma-python)。**MicroPython Enigma Python** 是一个旨在将 Enigma Python 库引入运行 MicroPython 的嵌入式设备的附属项目。它已被 https://awesome-micropython.com/#historical 引用,这是精选的最佳 MicroPython 库列表中的加密/历史(Cryptography/Historical)部分。
- [Retrocampus BBS Enigma 模拟器](https://retrocampus.com/bbs/)。连接到 BBS 后,输入 E 即可访问一台基于 **enigmapython** 作为后端的 Enigma I 密码机。
- [最小的 Enigma M4 模拟器](https://smallest-enigma.org)。**最小的 Enigma M4 模拟器**是一项技术规范和微型 Enigma M4 模拟器的世界纪录尝试,利用了 **enigmapython** 在微型嵌入式设备上的 MicroPython 兼容性。
- [Enigma Python MCP Server](https://github.com/denismaggior8/enigma-python-mcp)。**Enigma Python MCP Server** 是一个 Model Context Protocol (MCP) 服务器,它将 **enigmapython** 加密引擎作为工具暴露给 AI 助手,允许 LLM(例如 Claude)像二战期间那样原生地加密和解密消息。
如果您在项目(无论是公开的还是未公开的)中利用了 **enigmapython** API,请发邮件至 __denis.maggiorotto[at]gmail.com__,我会很乐意将您列在这里。 ## 致谢/参考 - 早期使用 Python 和 Enigma 进行实验的记录(本仓库的起源)可以在这里找到:https://github.com/denismaggior8/enigma-cypher - 转子接线取自 **Crypto Museum**,链接如下 https://www.cryptomuseum.com/crypto/enigma/wiring.htm - 感谢 - Piotte13 https://piotte13.github.io/enigma-cipher/ - Cryptii https://cryptii.com - PyEnigma https://pypi.org/project/pyenigma/ - 101 computing https://www.101computing.net/enigma-machine-emulator/ - DenCode Enigma simulator https://dencode.com/cipher/enigma - Daniel Palloks 编写的 Javascript/HTML 版本的 Enigma 模拟 https://people.physik.hu-berlin.de/~palloks/js/enigma/index_en.html - Daniel Palloks 编写的 Javascript/HTML 版本的 Enigma B A133 模拟 https://people.physik.hu-berlin.de/~palloks/js/enigma/enigma-a133_v261_en.html - Daniel Palloks 编写的 Javascript/HTML 版本的 Enigma Z 模拟 https://people.physik.hu-berlin.de/~palloks/js/enigma/enigma-z_v262b_en.html 感谢他们帮助我测试了所生成密文的正确性。 ## 支持 觉得它有用/有趣/有教育意义吗?请考虑 [](https://www.buymeacoffee.com/denismaggior8) 或 [](https://github.com/denismaggior8/enigma-python)
标签:Python, 历史, 密码学, 恩尼格玛机, 手动系统调用, 无后门, 算法模拟, 逆向工具