ciphers.permutation_cipher

The permutation cipher, also called the transposition cipher, is a simple encryption technique that rearranges the characters in a message based on a secret key. It divides the message into blocks and applies a permutation to the characters within each block according to the key. The key is a sequence of unique integers that determine the order of character rearrangement.

For more info: https://www.nku.edu/~christensen/1402%20permutation%20ciphers.pdf

Functions

decrypt(→ str)

Decrypt an encrypted message using a permutation cipher with block rearrangement.

encrypt(→ tuple[str, list[int]])

Encrypt a message using a permutation cipher with block rearrangement using a key.

generate_permutation_key(→ list[int])

Generate a random permutation key of a specified block size.

generate_valid_block_size(→ int)

Generate a valid block size that is a factor of the message length.

main(→ None)

Driver function to pass message to get encrypted, then decrypted.

Module Contents

ciphers.permutation_cipher.decrypt(encrypted_message: str, key: list[int]) str

Decrypt an encrypted message using a permutation cipher with block rearrangement.

Args:

encrypted_message (str): The encrypted message. key (list[int]): The permutation key for decryption.

Returns:

str: The decrypted plaintext message.

Example:
>>> encrypted_message, key = encrypt("HELLO WORLD")
>>> decrypted_message = decrypt(encrypted_message, key)
>>> decrypted_message
'HELLO WORLD'
ciphers.permutation_cipher.encrypt(message: str, key: list[int] | None = None, block_size: int | None = None) tuple[str, list[int]]

Encrypt a message using a permutation cipher with block rearrangement using a key.

Args:

message (str): The plaintext message to be encrypted. key (list[int]): The permutation key for decryption. block_size (int): The size of each permutation block.

Returns:

tuple: A tuple containing the encrypted message and the encryption key.

Example:
>>> encrypted_message, key = encrypt("HELLO WORLD")
>>> decrypted_message = decrypt(encrypted_message, key)
>>> decrypted_message
'HELLO WORLD'
ciphers.permutation_cipher.generate_permutation_key(block_size: int) list[int]

Generate a random permutation key of a specified block size.

Args:

block_size (int): The size of each permutation block.

Returns:

list[int]: A list containing a random permutation of digits.

Example:
>>> random.seed(0)
>>> generate_permutation_key(4)
[2, 0, 1, 3]
ciphers.permutation_cipher.generate_valid_block_size(message_length: int) int

Generate a valid block size that is a factor of the message length.

Args:

message_length (int): The length of the message.

Returns:

int: A valid block size.

Example:
>>> random.seed(1)
>>> generate_valid_block_size(12)
3
ciphers.permutation_cipher.main() None

Driver function to pass message to get encrypted, then decrypted.

Example: >>> main() Decrypted message: HELLO WORLD