ciphers.trifid_cipher¶
The trifid cipher uses a table to fractionate each plaintext letter into a trigram, mixes the constituents of the trigrams, and then applies the table in reverse to turn these mixed trigrams into ciphertext letters.
https://en.wikipedia.org/wiki/Trifid_cipher
Attributes¶
Functions¶
|
Convert each letter of the input string into their respective trigram values, join |
|
Arrange the triagram value of each letter of 'message_part' vertically and join |
|
A helper function that generates the triagrams and assigns each letter of the |
|
decrypt_message |
|
encrypt_message |
Module Contents¶
- ciphers.trifid_cipher.__decrypt_part(message_part: str, character_to_number: dict[str, str]) tuple[str, str, str] ¶
Convert each letter of the input string into their respective trigram values, join them and split them into three equal groups of strings which are returned.
>>> __decrypt_part('ABCDE', TEST_CHARACTER_TO_NUMBER) ('11111', '21131', '21122')
- ciphers.trifid_cipher.__encrypt_part(message_part: str, character_to_number: dict[str, str]) str ¶
Arrange the triagram value of each letter of ‘message_part’ vertically and join them horizontally.
>>> __encrypt_part('ASK', TEST_CHARACTER_TO_NUMBER) '132111112'
- ciphers.trifid_cipher.__prepare(message: str, alphabet: str) tuple[str, str, dict[str, str], dict[str, str]] ¶
A helper function that generates the triagrams and assigns each letter of the alphabet to its corresponding triagram and stores this in a dictionary (“character_to_number” and “number_to_character”) after confirming if the alphabet’s length is 27.
>>> test = __prepare('I aM a BOy','abCdeFghijkLmnopqrStuVwxYZ+') >>> expected = ('IAMABOY','ABCDEFGHIJKLMNOPQRSTUVWXYZ+', ... TEST_CHARACTER_TO_NUMBER, TEST_NUMBER_TO_CHARACTER) >>> test == expected True
Testing with incomplete alphabet >>> __prepare(‘I aM a BOy’,’abCdeFghijkLmnopqrStuVw’) Traceback (most recent call last):
…
KeyError: ‘Length of alphabet has to be 27.’
Testing with extra long alphabets >>> __prepare(‘I aM a BOy’,’abCdeFghijkLmnopqrStuVwxyzzwwtyyujjgfd’) Traceback (most recent call last):
…
KeyError: ‘Length of alphabet has to be 27.’
Testing with punctuations that are not in the given alphabet >>> __prepare(‘am i a boy?’,’abCdeFghijkLmnopqrStuVwxYZ+’) Traceback (most recent call last):
…
ValueError: Each message character has to be included in alphabet!
Testing with numbers >>> __prepare(500,’abCdeFghijkLmnopqrStuVwxYZ+’) Traceback (most recent call last):
…
AttributeError: ‘int’ object has no attribute ‘replace’
- ciphers.trifid_cipher.decrypt_message(message: str, alphabet: str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ.', period: int = 5) str ¶
decrypt_message¶
Decrypts a trifid_cipher encrypted message .
PARAMETERS¶
message: The message you want to decrypt .
alphabet (optional): The characters used for the cipher.
period (optional): The number of characters used in grouping when it was encrypted.
>>> decrypt_message('BCDGBQY') 'IAMABOY'
Decrypting with your own alphabet and period >>> decrypt_message(‘FMJFVOISSUFTFPUFEQQC’,’FELIXMARDSTBCGHJKNOPQUVWYZ+’,5) ‘AIDETOILECIELTAIDERA’
- ciphers.trifid_cipher.encrypt_message(message: str, alphabet: str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ.', period: int = 5) str ¶
encrypt_message¶
Encrypts a message using the trifid_cipher. Any punctuatuions that would be used should be added to the alphabet.
PARAMETERS¶
message: The message you want to encrypt.
alphabet (optional): The characters to be used for the cipher .
period (optional): The number of characters you want in a group whilst encrypting.
>>> encrypt_message('I am a boy') 'BCDGBQY'
>>> encrypt_message(' ') ''
>>> encrypt_message(' aide toi le c iel ta id era ', ... 'FELIXMARDSTBCGHJKNOPQUVWYZ+',5) 'FMJFVOISSUFTFPUFEQQC'
- ciphers.trifid_cipher.TEST_CHARACTER_TO_NUMBER¶
- ciphers.trifid_cipher.TEST_NUMBER_TO_CHARACTER¶
- ciphers.trifid_cipher.msg = 'DEFEND THE EAST WALL OF THE CASTLE.'¶