CSE 231 Updated 04/02/2019 Spring 2019 Programming Project 09
This assignment is worth 55 points (5.5% of the course grade) and must be completed and turned in before 11:59 on Monday, April 8, 2019.
Assignment Overview
(learning objectives)
This assignment will give you more experience on the use of:
1. lists
2. sets
3. functions
4. dictionaries 5. input/output
The goal of this project is to comprehend password strength and implement a dictionary attack on password hashes.
Assignment Background
Passwords are used everywhere, and their secrecy is paramount to security. The strength of a password is an important factor in determining how the password would fare against attacks by nefarious entities. The entropy of a password is helpful in determining how strong a password really is. Simply stated, entropy gives an indication of how many other passwords can be created using the characters in the given password. The higher the entropy of a password, the stronger it is. Obligatory xkcd comic on the entropy of a password: https://xkcd.com/936/
Each time you create a password, it gets converted to gibberish (encryption) and is then stored in a database for future reference. This encryption (called a hash) is one-way, meaning you can obtain the same hash from the same password every time however it is impossible to reverse the hash back to the original password. This hashing is done so that in the event of a database leak, the passwords are still illegible. An example of such hashing is MD5 hashing.
A well-know and effective attack is the dictionary attack against password hash leaks. Since password hashes cannot be reversed to obtain the plaintext password, hackers use wordlists that contain plaintext words and phrases and use these as candidate passwords. A plaintext password candidate is taken from the wordlist, hashed, and then the resulting hash is compared against the password hash. If there is an exact match, we have successfully recovered the password. Otherwise, we try another password candidate from the wordlist. This process is repeated until we reach the end of the wordlist or all passwords are discovered (or cracked).
Project Description
We have provided a file called pass.txt that stores the most common passwords observed. These are all real passwords obtained from password leaks that are available freely on the Internet. Caution: this is an unfiltered list so you likely will find crude or otherwise disturbing passwords. Needless to say, using one of the passwords in the file is really insecure. In this project, we will crack passwords, examine common patterns in these passwords, and calculate their entropies.
open_file(message) -> fp
This function taken in a prompt message (string) and returns a file pointer. You likely have a copy from a previous project, but this one adds a default. It repeatedly prompts for a file until one is successfully opened. It should have a try-except statement. By default (when the user does not provide a filename), this function opens the file pass.txt.
check_characters(str, str)
This function accepts the password string and a string with the characters to check against as parameters. It returns True if there is at least one matching character anywhere in the string; False otherwise. The string.punctuation is what we will use to define which characters are special characters.
For example, if the given password is 24x6A8+, all the following checks should return True:
password = 24x6A8+
check_characters(password, string.ascii_lowercase) -> True check_characters(password, string.ascii_uppercase) -> True check_characters(password, string.digits) -> True check_characters(password, string.punctuation) -> True
password_entropy_calculator(str) -> float
This function takes a string password as input and returns the entropy (float) of the password string. For example, if the password string is Tr0ub4dor&3, the entropy is 72.10. If the password is correcthorsebatterystaple, the entropy is
117.51. The entropy of a password is calculated as follows:
entropy = L * log2(N)
where N is the number of possible symbols and L is the number of symbols in the password (its
length).
The number of possible symbols, N, is determined as follows:
if the password is an empty string, the function should return 0
only numbers in the password string, N = 10
only special characters in the password string, N = 32
only numbers and special characters in the password string, N = 42
only lowercase characters in the password string, N = 26
only uppercase characters in the password string, N = 26
only uppercase and lowercase characters in the password string, N = 52
only lowercase and numbers in the password string, N = 36
only uppercase and numbers in the password string, N = 36
only uppercase and special characters in the password string, N = 58
only lowercase and special characters in the password string, N = 58
only lowercase and numbers and special characters in the password, N = 68
only uppercase and numbers and special characters in the password, N = 68
only lowercase and uppercase and numbers in the password string, N = 62
only lowercase and uppercase and special characters in the password string, N = 84
lowercase and uppercase and numbers and special characters in password string, N = 94
For example, if the given password contains only numbers, N = 10. The check_characters() function described above checks if a password has numbers. Use the check_characters function to assist in determining N.
The number of symbols L in the password is determined by the length of the password. Please note that entropy is rounded to 2 decimal places.
build_password_dictionary(fp) -> dict
This function takes a file pointer parameter of a password file. It reads the file and returns a dictionary of passwords. This dictionary has a passwords MD5 hash as the key, and a tuple as values. The tuple contains the password, its rank, and its entropy.
The MD5 hash of a string password is calculated as follows: md5(password.encode()).hexdigest()
(Explanation: for any string named password you can simply use that expression to calculate the MD5 hashthe expression returns the MD5 hash. The encode() method is a string method to prep thestringforhashing. Themd5isimportedfromhashlibandthehexdigest()isanmd5 method so you need from hashlib import md5 at the top of your program.)
For example, a key-value pair in this dictionary would be:
{e10adc3949ba59abbe56e057f20f883e:(123456, 1, 19.93)} That is, {MD5_hash : (password, rank, entropy)}
The rank of a password is a variable that is incremented by 1 only when a new password is added to the dictionary. This rank is indicative of the most common passwords (Rank 1 implies the password 123456 is the most common password).
cracking(fp,dict) -> (list-of-tuples,int,int)
This function takes a file pointer to the password hash file and a password dictionary as parameters. It then uses the password dictionary to crack the password hashes read from the file. The password hash file contains the password hash and hex separated by a colon :. For every password hash in the file, check if the hash is in the password dictionary (remember using in with a dictionary checks against the dictionary keys which is a hash in the password dictionary) . If a hash is found, we say that the password is cracked. A tuple (password_hash, password, entropy) is appended to a list. The list should then be sorted in ascending order based on password and returned along with the cracked count and the uncracked count. That is, the following is returned: (list of tuples, int, int)
create_set(fp) -> set
This function takes a file pointer to various list of words as parameter. It returns a set of all the unique words present in the file.
common_patterns(dict, common_set, name_set, phrase_set) -> dict
This function takes the password dictionary (returned by the build_password_dictionary function) and three sets as input and identifies common English words, first names, and phrases contained within the password. It returns a dictionary with the password as key and a list of patterns as
the value. The capitalization of the password does not matter, e.g., They or they should be treated the same.
The three sets contain common English words, first names, and phrases. Then it goes through each password in the password dictionary and checks to see if any of these English words, first names, or phrases are present in the password. For example, the password password contains [pass, password, word].
{password: [pass, password, word]}
Each list of patterns must be sorted in ascending order. Also, if two or more files contain the same strings (e.g. love is found in both phrases.txt and most_common_english_words.txt), the list should only store those strings only once. E.g. when password is ilovegod, list is [love] and NOT [love,love].
The function returns this dictionary with passwords as keys and the corresponding lists as values.
main()
This function prints provided BANNER and MENU and then asks the user to make a choice between the various available options shown in the menu. If the choice is 1, it calls the cracking() function, if it is 2, it calls the common_patterns() function, if it is 3, it calls calculate_password_entropy() function, and if it is 4, it exits. For choices 1 and 2, build a dictionary using build_password_dictionary(), but first use the open_file() function to open the password file (pass.txt).
The program should keep asking for user input and keep displaying the MENU until the user enters 4 and choses to exit. The banner is displayed only once when the program is first executed. Ensure proper error and exception handling in case the user enters an invalid choice. An error message is shown, and the user enter an input again: Error. Try again.
For option 1, the list returned by the cracking() function is displayed as follows:
sandra
123000
pisces
hiphop
johnny
123123123
tester
skyline
28.20
19.93
28.20
28.20
28.20
29.90
28.20
32.90
[ + ] crack3d!
[ + ] crack3d!
[ + ] crack3d!
[ + ] crack3d!
[ + ] crack3d!
[ + ] crack3d!
[ + ] crack3d!
[ + ] crack3d!
[ i ] stats: cracked 1,107; uncracked 136,588,893
f40a37048732da05928c3d374549c832
f46ef81f2464441ba58aeecbf654ee41
f480034fee8f39994f1989df74cdd206
f4e72bc32f2c636059d5f3ba44323921
f4eb27cea7255cea4d1ffabf593372e8
f5bb0c8de146c67b44babbf4e6584cc0
f5d1278e8109edd94e1e4197e04873b9
f5ddf8166360017ab573e218b2b7809c
Use this format string to get the formatting shown: [ + ] {:<12s} {:<34s} {:<14s} {:.2f}’ Cracking stats are displayed showing counts for cracked and uncracked passwords. Note the commasin the format: ‘[ i ] stats: cracked {:,d}; uncracked {:,d}’If option 2 is selected, after prompting for a password file and calling the build_password_dictionary() the program next asks the user to enter three files: most common English words: most_common_english_words.txt first names: firstnames.txt Phrases: phrases.txtAfter reading these files, it creates 3 sets containing common English words, first names, and phrases. You should use a function that take a file pointer and returns a set.This function also displays the contents of this dictionary in the following format:lilbitpasswordKILLERkerrykcchiefsisthemanimplantsherringgruntgranite[‘bit’, ‘lil’][‘pass’, ‘password’, ‘word’][‘kill’, ‘killer’][‘kerry’][‘chief’][’ema’, ‘man’, ‘the’, ‘them’][‘plan’, ‘plant’][‘her’, ‘ring’][‘run’][‘ran’, ‘rani’]The output can be formatted as follows:for k,v in D_patterns.items():print(“{:20s} [“.format(k),end=”)# print password print(‘, ‘.join(v),end=’]
‘) # print comma separated listNote that all of the lists shown above are sorted and the lists should also only store th strings only once. E.g. when password is ilovegod, list is [love] and NOT [love,love].Assignment DeliverableThe deliverable for this assignment is the following file: proj09.py the source code for your Python programBe sure to use the specified file name and to submit it for grading via Mimir before the project deadline.Assignment Notes1. More about storing passwords as hashes:a. https://crackstation.net/hashing-security.htm2. Use punctuation from string module to identify punctuation. Similarly, use string.uppercase, string.lowercase etc.3. from math import log2 to perform the log calculations.4. Videos on cracking passwords:https://www.youtube.com/channel/UC_MuHQPbf3EatJc7M6nDTlQ5. Items 1-9 of the Coding Standard will be enforced for this project.Test CasesTest 1: cracking password hashes -Password Analysis-____ , =, ( _________ | ='(VvvVvV–‘ |____(https://security.cse.msu.edu/[ 1 ] Crack MD5 password hashes[ 2 ] Locate common patterns[ 3 ] Calculate entropy of a password[ 4 ] Exit[ ? ] Enter choice: 1Common passwords file [enter for default]: passsmall.txt Hashes file: hashsmall.txtCracked Passwords: [ + ] crack3d![+ ] crack3d![+ ] crack3d!df53ca268240ca76670c8566ee54568a37b4e2d82900d5e94b8da524fbeb33c0df0349ce110b69f03b4def8012ae4970c62d929e7b7e7b6165923a5dfc60cb56e8c522a4c9bdc5ea1f7a0483d965e196e91e6348157868de9dd8b25c81aebfb9f3f8d7edcb9ac392250f2571fccc7dadcomputerfootballhockeyq1w2e3r4realmadridsecurityslapshot37.6037.6028.2041.3647.0037.6037.60[+ ] crack3d![+ ] crack3d![+ ] crack3d![+ ] crack3d![ i ] stats: cracked 7; uncracked 20[ 1 ] Crack MD5 password hashes[ 2 ] Locate common patterns[ 3 ] Calculate entropy of a password[ 4 ] Exit[ ? ] Enter choice: 4Test 2 Locating common patterns -Password Analysis-____ , =, ( _________ | ='(VvvVvV–‘ |____(https://security.cse.msu.edu/[ 1 ] Crack MD5 password hashes[ 2 ] Locate common patterns[ 3 ] Calculate entropy of a password[ 4 ] Exit[ ? ] Enter choice: 2Common passwords file [enter for default]: passsmall.txt Common English Words file: common_small.txtFirst names file: firstnames_small.txtPhrases file: phrases.txtPasswordsecurityrealmadridhockeyslapshotfootballcomputerpranshuq1w2e3r4enbodyPatterns[i, it][alma, i, rea, real][key][hot][all, ball, foot, football][put][an, ran][][body][ 1 ] Crack MD5 password hashes[ 2 ] Locate common patterns[ 3 ] Calculate entropy of a password[ 4 ] Exit[ ? ] Enter choice: 4Test 3: calculating entropy -Password Analysis-____ , =, ( _________ | ='(VvvVvV–‘ |____(https://security.cse.msu.edu/[ 1 ] Crack MD5 password hashes[ 2 ] Locate common patterns[ 3 ] Calculate entropy of a password[ 4 ] Exit[ ? ] Enter choice: 3Enter the password: dogponyCATFROG123456789cartruck?!The entropy of dogponyCATFROG123456789cartruck?! is 216.3[ 1 ] Crack MD5 password hashes[ 2 ] Locate common patterns[ 3 ] Calculate entropy of a password[ 4 ] Exit[ ? ] Enter choice: 4Test 4 -Password Analysis-____ , =, ( _________ | ='(VvvVvV–‘ |____(https://security.cse.msu.edu/[ 1 ] Crack MD5 password hashes[ 2 ] Locate common patterns[ 3 ] Calculate entropy of a password[ 4 ] Exit[ ? ] Enter choice: 6Error. Try again.[ 1 ] Crack MD5 password hashes[ 2 ] Locate common patterns[ 3 ] Calculate entropy of a password[ 4 ] Exit[ ? ] Enter choice: 0Error. Try again.[ 1 ] Crack MD5 password hashes[ 2 ] Locate common patterns[ 3 ] Calculate entropy of a password[ 4 ] Exit[ ? ] Enter choice: 1Common passwords file [enter for default]: xyzFile not found. Try again.Common passwords file [enter for default]:Hashes file: hashes.txtCracked Passwords:[ + ] crack3d![ + ] crack3d![ + ] crack3d![ + ] crack3d![ + ] crack3d![ + ] crack3d![ + ] crack3d!############many[ + ] crack3d![ + ] crack3d![ + ] crack3d![ + ] crack3d![ + ] crack3d![ + ] crack3d![ + ] crack3d![ + ] crack3d!670b14728ad9902aecba32e22fa4f6bddd4b21e9ef71e1291183a46b913ae6f2aa88d07736f55fbea78388eedcab28168c90bd835b348a4b83bf6ad3b3b07e9690b6a9b0171a9ed05629dbcb189c3b2a04c451b99027474c510677cbc1bd8331d6a9a933c8aafc51e55ac0662b6e4d4a0000000000000001011975010119790101800112198701234519.9326.5826.5826.5819.9326.5819.9328.2028.2028.2028.2028.2032.9028.2028.20lines not displayed in this document #########0f5366b3b19afc3184d23bc73d8cd311345d5fcc11a5d03ee3284a3a8e31cedcf16b82ee4c79ac26a8c8882cb2e7c525bd05aeb379f308de27d2d3a8d8142f72dad3a37aa9d50688b5157698acfd7aee04adb4e2f055c978c9bb101ee1bc5cd4168d3c263aa44687fc3f8e78ad56d8699be0a80012d71ede383e06ad6f6c9ceexavierxerxesxfilesxtremexxxxxxxxxxxxxyasminyugioh[ + ] crack3d![ + ] crack3d![ + ] crack3d![ + ] crack3d![ i ] stats: cracked 1,107; uncracked 12,552yvonnezigzagzxcvbnzzzzzz28.2028.2028.2028.207878847d55c22f58e3a702fc10d98c54d45e977bfef260da159d651b9de7035db427ebd39c845eb5417b7f7aaf1f9724453e41d218e071ccfb2d1c99ce23906a[ 1 ] Crack MD5 password hashes[ 2 ] Locate common patterns[ 3 ] Calculate entropy of a password[ 4 ] Exit[ ? ] Enter choice: 4Test 5https://security.cse.msu.edu/[ 1 ] Crack MD5 password hashes[ 2 ] Locate common patterns[ 3 ] Calculate entropy of a password[ 4 ] Exit[ ? ] Enter choice: 2-Password Analysis- ____, =, ( _________| ='(VvvVvV–‘|____(Common passwords file [enter for default]: pass1.txtCommon English Words file: most_common_english_words.txtFirst names file: firstnames.txtPhrases file: phrases.txtPassword123456password12345678qwerty1234567891234512341111111234567dragon123123baseballabc123footballmonkeyPatterns[][a, as, or, pass, password, word][][qwer, qwerty, we][][][][][][a, ag, ago, dragon, go, on][][a, all, as, ball, base, eba][a][a, all, ball, foot, football][key, monkey, on]letmein696969shadowmaster666666qwertyuiop123321mustang1234567890michael[i, in, let, me, mei][][a, do, had, shadow][a, as, master][][i, qwer, qwerty, we][][a, an, must, us][][a, i]############ many lines not displayed in this document #########beastachillestatianastudiosterlinplumberpatrick1mileskotenokhomersgbpltwgateway1frankydurangodrakedeeznutscowboys1ccbillbrando[a, as, be, bea, east][a, hill, i][a, an, ana, at, i, tatiana][di, i][i, in, lin][be, lu][a, at, i, pat][i, mil, mile][no, ten][home, me][][a, at, way][a, an, fran, frank, franky, ran][a, an, go, ran][a][de, dee][boy, cow][bill, i][a, an, and, do, ran][ 1 ] Crack MD5 password hashes[ 2 ] Locate common patterns[ 3 ] Calculate entropy of a password[ 4 ] Exit[ ? ] Enter choice: 4Function Tests: for each there is an input and an instructor value that the instructors version of the function returned.Function Test of check_characters function:———- Testing check numbers. ———-numbers 2468: Truenumbers 24x6A8: Truenumbers xA+: False———- Testing check lowercase. ———- lowercase 2468: Falselowercase 24x6A8: Truelowercase 24Y6A8: Falselowercase xA+: True———- Testing check uppercase. ———- uppercase 2468: Falseuppercase 24x6A8: Trueuppercase 24y6a8: Falseuppercase xA+: True———- Testing check special characters. ———- special_characters 2468: Falsespecial_characters 24x6A8: Falsespecial_characters 24y6&8: Truespecial_characters xA+: TrueFunction Test password_entropy_calculator(password)entropy 2468: 13.29entropy 24x6A8: 35.73entropy xA+: 19.18entropy abcd: 18.8entropy XYZ: 14.1entropy aXbYcZ: 34.2entropy 123abcXYZ: 53.59entropy $&%-: 20.0entropy $&%-123: 37.75entropy 24y6a8: 31.02entropy 24Y6A8B123: 51.7entropy A-B(C: 29.29entropy a-b(cxyz!: 52.72entropy 24y6&8R: 45.88entropy 1234567890abcdefgABCDEFG-$#: 176.97Function Test build_password_dictionary() using passsmall.txtInstructor dictionary:{‘e91e6348157868de9dd8b25c81aebfb9’: (‘security’, 1, 37.6), ‘e8c522a4c9bdc5ea1f7a0483d965e196’: (‘realmadrid’, 2, 47.0), ‘df0349ce110b69f03b4def8012ae4970’: (‘hockey’, 3, 28.2), ‘f3f8d7edcb9ac392250f2571fccc7dad’: (‘slapshot’, 4, 37.6), ’37b4e2d82900d5e94b8da524fbeb33c0′: (‘football’, 5, 37.6), ‘df53ca268240ca76670c8566ee54568a’: (‘computer’, 6, 37.6), ‘a6d420cb77a4b29af1c5f58dd6877401’: (‘pranshu’, 7, 32.9), ‘c62d929e7b7e7b6165923a5dfc60cb56’: (‘q1w2e3r4’, 8, 41.36), ‘4de18635d510a47087963af81fe8656a’: (‘enbody’, 9, 28.2)}Function Test cracking(fp,dict)password dictionary:{‘e91e6348157868de9dd8b25c81aebfb9’: (‘security’, 1, 37.6),’e8c522a4c9bdc5ea1f7a0483d965e196′: (‘realmadrid’, 2, 47.0), ‘df0349ce110b69f03b4def8012ae4970’: (‘hockey’, 3, 28.2), ‘f3f8d7edcb9ac392250f2571fccc7dad’: (‘slapshot’, 4, 37.6), ’37b4e2d82900d5e94b8da524fbeb33c0′: (‘football’, 5, 37.6), ‘df53ca268240ca76670c8566ee54568a’: (‘computer’, 6, 37.6), ‘a6d420cb77a4b29af1c5f58dd6877401’: (‘pranshu’, 7, 32.9), ‘c62d929e7b7e7b6165923a5dfc60cb56’: (‘q1w2e3r4’, 8, 41.36), ‘4de18635d510a47087963af81fe8656a’: (‘enbody’, 9, 28.2)}instructor cracked:[(‘df53ca268240ca76670c8566ee54568a’, ‘computer’, 37.6),(’37b4e2d82900d5e94b8da524fbeb33c0′, ‘football’, 37.6), (‘df0349ce110b69f03b4def8012ae4970’, ‘hockey’, 28.2), (‘c62d929e7b7e7b6165923a5dfc60cb56’, ‘q1w2e3r4’, 41.36), (‘e8c522a4c9bdc5ea1f7a0483d965e196’, ‘realmadrid’, 47.0), (‘e91e6348157868de9dd8b25c81aebfb9’, ‘security’, 37.6), (‘f3f8d7edcb9ac392250f2571fccc7dad’, ‘slapshot’, 37.6)] instructor counts: 7 20Function Test common_patterns(D,common,names,phrases)D= {‘e91e6348157868de9dd8b25c81aebfb9’: (‘security’, 1, 37.6), ‘e8c522a4c9bdc5ea1f7a0483d965e196’: (‘realmadrid’, 2, 47.0), ‘df0349ce110b69f03b4def8012ae4970’: (‘hockey’, 3, 28.2), ‘f3f8d7edcb9ac392250f2571fccc7dad’: (‘slapshot’, 4, 37.6), ’37b4e2d82900d5e94b8da524fbeb33c0′: (‘football’, 5, 37.6), ‘df53ca268240ca76670c8566ee54568a’: (‘computer’, 6, 37.6), ‘a6d420cb77a4b29af1c5f58dd6877401’: (‘pranshu’, 7, 32.9), ‘c62d929e7b7e7b6165923a5dfc60cb56’: (‘q1w2e3r4’, 8, 41.36), ‘4de18635d510a47087963af81fe8656a’: (‘enbody’, 9, 28.2)}common_S = {‘I’, ‘all’, ‘an’, ‘are’, ‘as’, ‘at’, ‘ball’, ‘be’, ‘body’, ‘but’, ‘by’, ‘can’, ‘foot’, ‘football’, ‘from’, ‘had’, ‘have’, ‘his’, ‘hot’, ‘it’, ‘key’, ‘liquid’, ‘log’, ‘meant’, ‘motion’, ‘on’, ‘one’, ‘or’, ‘other’, ‘out’, ‘path’, ‘put’, ‘quotient’, ‘ran’, ‘real’, ‘shell’, ‘some’, ‘steam’, ‘teeth’, ‘they’, ‘this’, ‘we’, ‘were’, ‘what’, ‘with’, ‘word’}names_S = {‘Abagail’, ‘Abbe’, ‘Abbey’, ‘Alma’, ‘Danna’, ‘Danni’, ‘Dannie’, ‘Danny’, ‘Dannye’, ‘Danya’, ‘Danyelle’, ‘Danyette’, ‘Daphene’, ‘Daphna’, ‘Daphne’, ‘Dara’, ‘Darb’, ‘Malory’, ‘Malva’, ‘Malvina’, ‘Malynda’, ‘Mame’, ‘Mamie’, ‘Manda’, ‘Mandi’, ‘Mandie’, ‘Mandy’, ‘Manon’, ‘Manya’, ‘Mara’, ‘Marabel’, ‘Marcela’, ‘Marcelia’, ‘Marcella’, ‘Marcelle’, ‘Rea’, ‘Wally’, ‘Waly’, ‘Wanda’, ‘Wandie’, ‘Wandis’, ‘Waneta’, ‘Wanids’, ‘Wenda’, ‘Wendeline’, ‘Wendi’, ‘Wendie’, ‘Wendy’}phrases_S = {‘access’, ‘alex’, ‘angel’, ‘batman’, ‘catch’, ‘chase’, ‘cyclops’, ‘dragon’, ‘enjoy’, ‘enter’, ‘express’, ‘flash’, ‘football’, ‘freedom’, ‘gambit’, ‘green’, ‘hawkeye’, ‘ironman’, ‘killer’, ‘love’, ‘master’, ‘money’, ‘monkey’, ‘password’, ‘please’, ‘punisher’, ‘qazwsx’, ‘qwer’, ‘qwerty’, ‘remember’, ‘rescue’, ‘shadow’, ‘silver’, ‘spiderman’, ‘summer’, ‘superman’, ‘thor’, ‘welcome’, ‘wolverine’}instructor_D = {‘security’: [‘i’, ‘it’], ‘realmadrid’: [‘alma’, ‘i’, ‘rea’, ‘real’], ‘hockey’: [‘key’], ‘slapshot’: [‘hot’], ‘football’: [‘all’, ‘ball’, ‘foot’, ‘football’], ‘computer’: [‘put’], ‘pranshu’: [‘an’, ‘ran’], ‘q1w2e3r4’: [], ‘enbody’: [‘body’]}Function Test create_set(fp)print(“———- Testing common words. ———-“) fp1 = open(‘common_small.txt’)common_S = create_set(fp1)instructor_common_S = {‘motion’, ‘from’, ‘were’, ‘liquid’, ‘out’, ‘foot’, ‘they’, ‘by’, ‘real’, ‘hot’, ‘shell’, ‘can’, ‘an’, ‘football’, ‘log’, ‘meant’, ‘on’, ‘path’, ‘put’, ‘with’, ‘but’, ‘some’, ‘other’, ‘quotient’, ‘be’, ‘had’, ‘this’, ‘his’, ‘teeth’, ‘at’, ‘steam’, ‘as’, ‘key’, ‘we’, ‘all’, ‘word’, ‘have’, ‘ran’, ‘I’, ‘ball’, ‘body’, ‘one’, ‘or’, ‘are’, ‘what’, ‘it’}print(“———- Testing first names. ———-“) fp2 = open(‘firstnames_small.txt’)names_S = create_set(fp2)instructor_names_S = {‘Mame’, ‘Malynda’, ‘Malory’, ‘Rea’, ‘Wandis’, ‘Dannye’, ‘Abbe’, ‘Marcela’, ‘Mamie’, ‘Marabel’, ‘Malva’, ‘Dara’, ‘Abagail’, ‘Wanda’, ‘Abbey’, ‘Wandie’, ‘Malvina’, ‘Wenda’, ‘Manda’, ‘Mandi’, ‘Waneta’, ‘Wanids’, ‘Marcelia’, ‘Danny’, ‘Manya’, ‘Danya’, ‘Manon’, ‘Mara’, ‘Daphene’, ‘Darb’, ‘Danna’, ‘Mandie’, ‘Waly’, ‘Wendi’, ‘Wendie’, ‘Wally’, ‘Wendeline’, ‘Danyette’, ‘Daphna’, ‘Mandy’, ‘Daphne’, ‘Dannie’, ‘Marcella’, ‘Danyelle’, ‘Wendy’, ‘Alma’, ‘Marcelle’, ‘Danni’}print(“———- Testing phrases. ———-“) fp3 = open(‘phrases.txt’)phrases_S = create_set(fp3)instructor_phrases_S = {‘password’, ‘express’, ‘qazwsx’, ‘batman’, ‘alex’, ‘gambit’, ‘ironman’, ‘green’, ‘football’, ‘qwerty’, ‘thor’, ‘money’, ‘silver’, ‘cyclops’, ‘dragon’, ‘wolverine’, ‘monkey’, ‘please’, ‘hawkeye’, ‘punisher’, ‘summer’, ‘freedom’, ‘enjoy’, ‘angel’, ‘master’, ‘shadow’, ‘welcome’, ‘killer’, ‘access’, ‘qwer’, ‘chase’, ‘superman’, ‘remember’, ‘catch’, ‘spiderman’, ‘flash’, ‘rescue’, ‘enter’, ‘love’}Grading RubricGeneral Requirements:4 pts Coding Standard 1-9(descriptive comments, source code Headers, function headers, etc…)Function Tests:3 pts open_file (no Mimir test) -1 Did not use try/except -1 Did use default file name -1 Did not use while loop4 pts check_characters()5 pts password_entropy_calculator()5 pts build_password_dictionary()5 pts cracking()2 pts create_set()5 pts common_patterns()Program Tests4 pts Test14 pts Test24 pts Test35 pts Test45 pts Test5
Reviews
There are no reviews yet.