Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Write a Python program plaifair.py as follows: def playfair(key, plaintext): # your code here if __name__ == __main__: # your code here The conditional statement

Write a Python program plaifair.py as follows:

def playfair(key, plaintext):

# your code here

if __name__ == "__main__":

# your code here

The conditional statement above allows the program to be ran directly.

STEP A - Compute and print the encryption table

1 - Create a 5x5 table as a list of lists.

2 Define a function called init_table() which initializes the table with stars. This function does not return anything.

3 Print out the table. The output should look like this:

* * * * *

* * * * *

* * * * *

* * * * *

* * * * *

4 Define a function called table_has(letter) which checks if a letter already exists in the table. This function should return true or false depending on whether the letter exists.

5 Define a function clean_key(key) which changes the secret key to uppercase and replace I by J, then returns the clean key.

6 Define a function set_cell(letter) which sets a table cell to a specific letter.

7 Define a function create_table(key) to populate the encryption table given the secret key. This function should:

Initialize the table.

Clean the secret key.

Build the table using the set_cell() and table_has() functions.

8 Print out the encryption table.

STEP B Encrypt your secret message

1 Define a function find_letter(letter) which returns the row and column of the letter in the table.

2 - Define a function encode_pair(a, b) which takes a pair of letters a and b, runs the encoding rules and returns the encoded pair as follows:

AB -> LF (sample)

Function should print an error message if a equals b and stop program execution.

Suggested approach:

Compute a_row, a_col, b_row, b_col using the find_letter function.

Use an if-elif-else statement to compute a_new_row, a_new_col, b_new_row, b_new_col based on the encryption rules.

Optional: To make your code cleaner, you may want to create separate encoding functions for the 3 different cases: same row (with wrapping), same column (with wrapping), and rectangle.

3 Define a function cleanup(plaintext) which returns the cleaned up message as follows:

Changes it to uppercase.

Removes spaces.

Replaces J by I.

Places a letter X between 2 consecutive repeating letters as follows:

EE -> EXE

If the repeated letter happen to be an X, insert the letter Q in between as follows:

XX -> XQX

If the length of the resulting text is an add number, add the letter Z at the end as follows:

..G -> ..GZ

If the last letter happens to be a Z, add the letter Q at the end as follows:

..Z -> ..ZQ

Suggested approach:

Note that fixing a problem may lead to an new one. E.g. inserting an X may lead to a plaintext with an odd length. Therefore, you should create a while loop which will repeatedly call a function to fix issues and return a new plaintext until no more issues are found.

STEP C Encrypt your secret message

1 Define a function encrypt(plaintext) which encodes the message plaintext and returns the ciphertext. Make sure to insert a space every 5 letters in the resulting ciphertext (e.g. KLDGD NXSLO CWGQH KUINF ACWER)

2 Execute and print the ciphertext. The execution phase should:

a. Prompt for the secret key.

b. Prints the secret key as entered.

c. Prompt for the secret message (plaintext).

d. Prints the secret message as entered.

e. Computes and prints the encrypted message (ciphertext).

f. Asks if user wants to encrypt another message

If yes, program goes back to step a.

If no, program stops execution.

STEP D Extra-Credit

Create a function decrypt(key, ciphertext) which takes two parameters, the secret and the ciphertext and returns the plaintext.

THE SUBMISSION

Submit a playfair.txt or py file as follows:

Program should be structure as described in this project.

All functions should have the same names as indicated above. They may be tested separately for partial credit in case your program fails.

All functions have a comment above them explaining their purpose.

Submission should be free from debugging code or test code.

TESTING YOUR CODE Not to include with your submission

Create a Python program called test_playfair.py in and place it in the same directory as your main program. The code should import your encryption code and then run some tests as follows:

import playfair

def test(key, plain, expected):

cipher = playfair.playfair(key, plain)

if cipher != expected:

print("%s : %s != %s" % (plain, cipher, expected))

# execute test:

test(mysecretkey, this is my secret message, WQIUW QOKSG ADAJH AOIQU WIQUW)

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Data Mining Concepts And Techniques

Authors: Jiawei Han, Micheline Kamber, Jian Pei

3rd Edition

0123814790, 9780123814791

More Books

Students also viewed these Databases questions

Question

1. Write down two or three of your greatest strengths.

Answered: 1 week ago