# Substitution Cipher

• Difficulty Level : Medium
• Last Updated : 29 Sep, 2021

Hiding some data is known as encryption. When plain text is encrypted it becomes unreadable and is known as ciphertext. In a Substitution cipher, any character of plain text from the given fixed set of characters is substituted by some other character from the same set depending on a key. For example with a shift of 1, A would be replaced by B, B would become C, and so on.

Note: Special case of Substitution cipher is known as Caesar cipher where the key is taken as 3.

#### Mathematical representation

The encryption can be represented using modular arithmetic by first transforming the letters into numbers, according to the scheme, A = 0, B = 1,…, Z = 25. Encryption of a letter by a shift n can be described mathematically as. (Encryption Phase with shift n) (Decryption Phase with shift n) Examples:

```Plain Text: I am studying Data Encryption
Key: 4
Output: M eq wxyhCmrk Hexe IrgvCtxmsr

Plain Text: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Key: 4
Output: EFGHIJKLMNOPQRSTUVWXYZabcd```

Algorithm for Substitution Cipher:

Input:

• A String of both lower and upper case letters, called PlainText.
• An Integer denoting the required key.

Procedure:

• Create a list of all the characters.
• Create a dictionary to store the substitution for all characters.
• For each character, transform the given character as per the rule, depending on whether we’re encrypting or decrypting the text.
• Print the new string generated.

Below is the implementation.

## Python3

 `# Python program to demonstrate``# Substitution Cipher`  `import` `string`  `# A list containing all characters``all_letters``=` `string.ascii_letters`` ` `    ` `"""``create a dictionary to store the substitution``for the given alphabet in the plain text``based on the key``"""`` ` `    ` `dict1 ``=` `{}``key ``=` `4`` ` `for` `i ``in` `range``(``len``(all_letters)):``    ``dict1[all_letters[i]] ``=` `all_letters[(i``+``key)``%``len``(all_letters)]`` ` ` ` `plain_txt``=` `"I am studying Data Encryption"``cipher_txt``=``[]`` ` `# loop to generate ciphertext`` ` `for` `char ``in` `plain_txt:``    ``if` `char ``in` `all_letters:``        ``temp ``=` `dict1[char]``        ``cipher_txt.append(temp)``    ``else``:``        ``temp ``=``char``        ``cipher_txt.append(temp)``        ` `cipher_txt``=` `"".join(cipher_txt)``print``(``"Cipher Text is: "``,cipher_txt)`` ` `    ` `"""``create a dictionary to store the substitution``for the given alphabet in the cipher``text based on the key``"""`` ` `    ` `dict2 ``=` `{}    ``for` `i ``in` `range``(``len``(all_letters)):``    ``dict2[all_letters[i]] ``=` `all_letters[(i``-``key)``%``(``len``(all_letters))]``     ` `# loop to recover plain text``decrypt_txt ``=` `[]` `for` `char ``in` `cipher_txt:``    ``if` `char ``in` `all_letters:``        ``temp ``=` `dict2[char]``        ``decrypt_txt.append(temp)``    ``else``:``        ``temp ``=` `char``        ``decrypt_txt.append(temp)``        ` `decrypt_txt ``=` `"".join(decrypt_txt)``print``(``"Recovered plain text :"``, decrypt_txt)`

Output:

```Cipher Text is:  M eq wxyhCmrk Hexe IrgvCtxmsr
Recovered plain text : I am studying Data Encryption```

My Personal Notes arrow_drop_up