Python Week 4-Numpy and Hashlib

Allows a user to enter and validate their phone number and zipcode+4. Then the user will enter values of two, 3x3 matrices and then select from options including, addition, subtraction, matrix multiplication, and element by element multiplication. You should use numpy.matmul() for matrix multiplication (e.g. np.matmul(a, b) ). The program should compute the appropriate results and return the results, the transpose of the results, the mean of the rows for the results, and the mean of the columns for the results.

When entering data, the application should use regular expressions and/or Pandas functionality to check the format of the phone number and zipcode. You should check that each value is numeric for the matrices. The user interface should continue to run until the user indicates they are ready to exit.

A user interface might look similar to this:

***************** Welcome to the Python Matrix Application*********** Do you want to play the Matrix Game?

Enter Y for Yes or N for No:

Y

555-555-55

Enter your zip code+4 (XXXXX-XXXX): 21022-3213

1 2 4

4 2 1

3 8 9

1 2 4

4 2 1

3 8 9

3 2 1

7 2 5

5 2 1

3 2 1

7 2 5

5 2 1

Select a Matrix Operation from the list below:

b. Subtraction

c. Matrix Multiplication

d. Element by element multiplication a

You selected Addition. The results are: 4 4 5

11 4 6

8 10 10

The Transpose is:

4 11 8

4 4 10

5 6 10

The row and column mean values of the results are: Row: 4.33, 7, 9.33

Column: 7.66, 6, 7

Do you want to play the Matrix Game? Enter Y for Yes or N for No:

N

*********** Thanks for playing Python Numpy ***************

If an inappropriate entry is detected, the program should prompt for a correct value and continue to do so until a correct value is entered.

Hints:

1. Use numpy, pandas and regular expressions as appropriate.

2. Create and use functions as often as possible

3. Both integers and float values are acceptable

5. Test with many combinations.

6. Use pylint to verify the code style – the goal is a 10!

Document your testing results using your programming environment. You should also include and discuss your pylint results for the application. The test document should include a test table that includes the input values, the expected results and the actual results. A screen capture should be included that shows the actual test results of running each test case found in the test table. Be sure to include multiple test cases to provide full coverage for all code and for each function you develop and test.

Password crackers can easily be written using Python code. You can also generate a hashed password using Python with a variety of hash algorithms. For this exercise, you will create use Python code to generate ten (10) passwords with different hashing algorithms and then use a popular online password cracking website to see if the passwords can be cracked.

For example, the following Python code can be used to hash a password input using MD-5, SHA-256 and SHA-512 algorithms.

import hashlib

# input a message to encode print('Enter a message to encode:') message = input()

# encode it to bytes using UTF-8 encoding message = message.encode()

# hash with MD5 (very weak) print(hashlib.md5(message).hexdigest())

# Lets try a stronger SHA-2 family print(hashlib.sha256(message).hexdigest()) print(hashlib.sha512(message).hexdigest())

When you run this at the command prompt, you enter a password and then you will receive the hashed values for the MD-5, SHA-256 and SHA-512 algorithms, respectively.

In this case, hello05 was entered and resulted in the 3 outputs. Notice, the SHA-512 is quite long and extends over two lines.

If we take those 3 output hashes and input them into the Crackstation.net URL, the passwords are hacked in each case:

Notice in each case, the original password of hello05 was cracked.

You can salt a password by adding some random text of a phrase to the beginning of your actual password. This will add some strength to preventing a quick decryption. For this simple Python code, you can simulate a salt by adding a string to the front of password and then run the output into the Crackstation. For example, consider this salted password:

In this case the phase “wellwhatdoyouknowaboutthat” is placed in front of hello05. The resulting output hashes are:

9aa8390dd622412e6a5ec75f35a661d9 94e0cb79b0dbbe82ea06c37af830f21bf926593618c6859141e553e61c759800

05f1d3eaaf9fc6b72410d16f78df7db42599367160c60f46888d6a888e68beef0b696ddb9c57debaaba2869 d45f23cdf0538b31449c9191d0254645b5b16ff61

When use those hash values as input into the Crackstation, the decoder fails:

For your activity, experiment with the Python script using MD-5, SHA-256 and SHA-512 hash algorithms for at least 20 different passwords. Be sure to experiment with “easy” passwords, salted passwords as well as randomly generated passwords.

For your report, prepare a table that shows the input password, the resulting hashes and if the Crackstation.net site was able to crack the password. An example table is shown below: