Skip to main content

Python-based Enigma.

Project description

myenigma

PyPI PyPI - Downloads

Python-based Enigma.

查看中文版 README

A brief tutorial of how to develop it (in Chinese)

Install

pip install myenigma

Only supports Python 3.10 or above.

Usage

Import

from myenigma import Enigma

The package also contains some sample plate:

from myenigma.sample_plate.rotor import rotor_i, rotor_ii, rotor_iii
from myenigma.sample_plate.reflector import reflector_b

Defining

Make sure the rotors are from right to left:

e = Enigma([rotor_iii(), rotor_ii(), rotor_i()], reflector_b())

Encryption / Decryption

Just input:

assert e.input('HELLOWORLDBYTHEAUTHOROFTHISPACKAGEDINGJUNYAO') == 'ILBDAAMTAZIJNXSCSIJJPDDWZBRCCUPGQXGRJXQOFGHL'

And change the positions of the rotors (Defaults to all origin):

e.set_position()
assert e.input('ILBDAAMTAZIJNXSCSIJJPDDWZBRCCUPGQXGRJXQOFGHL') == 'HELLOWORLDBYTHEAUTHOROFTHISPACKAGEDINGJUNYAO'

Number starts from 0, and also from right to left. You can also use letter:

e.set_position(3, 12, 21)
assert e.input('HELLOWORLDBYTHEAUTHOROFTHISPACKAGEDINGJUNYAO') == 'XTGHAGDIVUPGBZVQSFMBSGLKVQHQWESYRTSRMOOFGRLE'
e.set_position('D', 12, 21)
assert e.input('XTGHAGDIVUPGBZVQSFMBSGLKVQHQWESYRTSRMOOFGRLE') == 'HELLOWORLDBYTHEAUTHOROFTHISPACKAGEDINGJUNYAO'

Customize

You can freely customize your Enigma. For example, customize the circuits of rotors:

from myenigma.part.plate import Rotor, Reflector

rotor_I = Rotor('EKMFLGDQVZNTOWYHXUSPAIBRCJ', name='Rotor I', turnover='Q')
rotor_II = Rotor('AJDKSIRUXBLHWTMCQGZNPYFVOE', name='Rotor II', turnover='E')
rotor_III = Rotor('BDFHJLCPRTXVZNYEIWGAKMUSQO', name='Rotor III', turnover='V')
reflector_B = Reflector('YRUHQSLDPXNGOKMIEBFZCWVJAT', name='Reflector B')
e_customize = Enigma([rotor_III, rotor_II, rotor_I], reflector_B)
# same as e above

A tiny Enigma:

map_source = 'ASDF'
e_custom_1 = Enigma(
    [
        Rotor('AFSD', name='I', map_source=map_source),
        Rotor('SDAF', name='II', map_source=map_source),
        Rotor('DFAS', name='III', map_source=map_source),
    ],
    Reflector('DFAS', name='R', map_source=map_source),
    rotate_up=True, rotate_after_type=True
)
assert e_custom_1.input('AA') == 'SD'
e_custom_1.set_position()
assert e_custom_1.input('SD') == 'AA'

And even in other character!

map_source_2 = '甲乙丙丁'
e_custom_2 = Enigma(
    [
        Rotor('甲丁乙丙', name='I', map_source=map_source_2),
        Rotor('乙丙甲丁', name='II', map_source=map_source_2),
        Rotor('丙丁甲乙', name='III', map_source=map_source_2),
    ],
    Reflector('丙丁甲乙', name='R', map_source=map_source_2),
    rotate_up=True, rotate_after_type=True
)
assert e_custom_2.input('甲甲') == '乙丙'
e_custom_2.set_position()
assert e_custom_2.input('乙丙') == '甲甲'

Plugboard

Plugboard is also supported:

e.plugboard.plug('L', 'M')
e.plugboard.plug('O', 'P')
assert e.input('HELLOWORLDBYTHEAUTHOROFTHISPACKAGEDINGJUNYAO') == 'IMKPJAITPZIJNXSCSIJEOEDWZBRMCUOGQXGRJXQPFGHF'
e.set_position()
assert e.input('IMKPJAITPZIJNXSCSIJEOEDWZBRMCUOGQXGRJXQPFGHF') == 'HELLOWORLDBYTHEAUTHOROFTHISPACKAGEDINGJUNYAO'
e.unplug('L')
e.unplug('P')

Reference

License

MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

myenigma-2.0.2.tar.gz (10.1 kB view details)

Uploaded Source

Built Distribution

myenigma-2.0.2-py3-none-any.whl (11.6 kB view details)

Uploaded Python 3

File details

Details for the file myenigma-2.0.2.tar.gz.

File metadata

  • Download URL: myenigma-2.0.2.tar.gz
  • Upload date:
  • Size: 10.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for myenigma-2.0.2.tar.gz
Algorithm Hash digest
SHA256 7bfc60ead76d614bc6b9ce12505a20982bfd5eae6211e0e0a29c54ca331121f0
MD5 ebc59b962f784a4fb9bf8c125d5be8e3
BLAKE2b-256 c9078896cb324248435a40b2a8018304af971ee6218f0335e3c5401b284071d2

See more details on using hashes here.

Provenance

File details

Details for the file myenigma-2.0.2-py3-none-any.whl.

File metadata

  • Download URL: myenigma-2.0.2-py3-none-any.whl
  • Upload date:
  • Size: 11.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for myenigma-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 3648d7423724d1d1c32b265bed2493efcbf15769f4ab69371c48fb3cc0cec884
MD5 e6aeac4d0572a218f3aba4b55bebfd94
BLAKE2b-256 616892cfaae42d609d25c5d0330389696ea37098fa8bcaa2b0f4069ebd7b8ff7

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page