def test_q4(): print("-------------------------------------------") print("Testing Q4: DoubleX Cipher") print() print('Case 1:') ciphertext = utilities.file_to_text('q4A_ciphertext.txt') plaintext, key = final.q4A(ciphertext) print('key1 = ', key[0]) print('key2 = ', key[1]) print('plaintext[500:574]', plaintext[500:574]) print() print('Case 2:') ciphertext = utilities.file_to_text('q4B_ciphertext.txt') plaintext, key = final.q4B(ciphertext) print('key1 = ', key[0]) print('key2 = ', key[1]) print('plaintext[500:576]', plaintext[500:576]) print() print('Case 3:') ciphertext = utilities.file_to_text('q4C_ciphertext.txt') plaintext, key = final.q4C(ciphertext) print('key1 = ', key[0]) print('key2 = ', key[1]) print('plaintext[499:576]', plaintext[499:576]) print() print("-------------------------------------------") return
def test_q4(file1, file2): print('Testing encryption over sample file:') plaintext = utilities.file_to_text('plaintext_xcrypt_sample.txt') ciphertext = utilities.file_to_text('ciphertext_xcrypt_sample.txt') key = 82 ciphertext2 = solution.e_xcrypt(plaintext, key) if ciphertext == ciphertext2: print('Encryption Successful') else: print('Encryption failed') plaintext2 = solution.d_xcrypt(ciphertext2, key) if plaintext == plaintext2: print('Decryption Successful') else: print('Decryption failed') print() print('Testing decryption over sample file:') plaintext2 = solution.d_xcrypt(ciphertext2, key) if plaintext == plaintext2: print('Decryption Successful') else: print('Decryption failed') print() plaintext = '' ciphertext = '' ciphertext2 = '' plain4 = file1 cipher4 = file2 key = 0 ciphertext = utilities.file_to_text(cipher4) print('Cryptanalysis of {}:'.format(cipher4)) key, plaintext = solution.cryptanalysis_xcrypt(ciphertext) print('Key found: ', key) print() print('Plaintext:') print(plaintext[:150]) print() print('Cryptanalysis Successful? ', end='') ciphertext2 = solution.e_xcrypt(plaintext, key) if ciphertext == ciphertext2: print('Yes') else: print('No') print() solution.comments_q4() return
def test_q2(file1, file2): print('Testing Encryption/decryption against sample file:') plaintext = utilities.file_to_text('plaintext_subcipher_sample.txt') ciphertext = utilities.file_to_text('ciphertext_subcipher_sample.txt') key = utilities.adjust_key("""poejiqsrbltxwaznfcdhmvgkuy:'" !.?,-#;""") ciphertext2 = solution.e_substitution(plaintext, key) if ciphertext == ciphertext2: print('\tEncryption Successful') else: print('\tEncryption failed') plaintext2 = solution.d_substitution(ciphertext2, key) if plaintext == plaintext2: print('\tDecryption Successful') else: print('\tDecryption failed') print() # this is given you do not need to do anything for it print('Cryptanalysis for Sample File:') key = '''poejiqsrbltxwaznfcdhmvgkuy:'" !.?,-#;''' print('found key = ', key) print() # Cryptanalysis of your file plaintext = '' ciphertext = '' ciphertext2 = '' plain1 = file1 cipher1 = file2 key = 0 ciphertext = utilities.file_to_text(cipher1) print('Cryptanalysis of {}:'.format(cipher1)) key, plaintext = solution.cryptanalysis_substitution(ciphertext) print('Key found: ', utilities.adjust_key(key)) print() print('Plaintext:') print(plaintext[:150]) print() print('Verifying cryptanalysis results: ', end='') ciphertext2 = solution.e_substitution(plaintext, key) if ciphertext == ciphertext2: print('OK') else: print('Something is not right!') print() solution.comments_q2() return
def task4(): print('{}'.format('-' * 40)) print("Start of Task 4: Columnar Transposition Cipher") print() print('----------- Testing get_keyOrder_columnarTrans:') keys = [ '', 'r', '?', 'RAINY?', 'dad', 'face', 'Face', 'apple', 'good day', 'German' ] for key in keys: print('Key order for {} ='.format(key), end=' ') keyOrder = A2_solution._get_order_ct(key) print(keyOrder) print() print('Testing Encryption/Decryption:') keys = ['', 'German', 'Truth Seeker'] plaintext = utilities.file_to_text('plaintext3.txt') plaintexts = ['ABC', 'DEFENDEASTERNWALLOFTHECASTLE', plaintext] for i in range(len(keys)): print('key = ', keys[i]) print('plaintext =\n{}'.format(plaintexts[i])) ciphertext = A2_solution.e_ct(plaintexts[i], keys[i]) print('ciphertext =\n{}'.format(ciphertext)) plaintext2 = A2_solution.d_ct(ciphertext, keys[i]) print('plaintext2 =\n{}'.format(plaintext2)) print() print('End of Task 4: Columnar Transposition Cipher Testing') print('{}'.format('-' * 40)) print() return
def test_q1(file1, file2): print('Testing Encryption/decryption against sample file:') plaintext = utilities.file_to_text('plaintext_vigenere_sample.txt') ciphertext = utilities.file_to_text('ciphertext_vigenere_sample.txt') key = 'disposition' ciphertext2 = solution.e_vigenere(plaintext, key) if ciphertext == ciphertext2: print('\tEncryption Successful') else: print('\tEncryption failed') plaintext2 = solution.d_vigenere(ciphertext2, key) if plaintext == plaintext2: print('\tDecryption Successful') else: print('\tDecryption failed') print() print('Cryptanalysis for Sample File:') key, plaintext = solution.cryptanalysis_vigenere(ciphertext) print('found key = ', key) print() plaintext = '' ciphertext = '' ciphertext2 = '' plain1 = file1 cipher1 = file2 key = 0 ciphertext = utilities.file_to_text(cipher1) print('Cryptanalysis of {}:'.format(cipher1)) key, plaintext = solution.cryptanalysis_vigenere(ciphertext) print('Key found: ', key) print() print('Plaintext:') print(plaintext[:150]) print() print('Verifying cryptanalysis results: ', end='') ciphertext2 = solution.e_vigenere(plaintext, key) if ciphertext == ciphertext2: print('OK') else: print('Something is not right!') print() solution.comments_q1() return
def test_q3(file1, file2): print('Testing Encryption/decryption against sample file:') plaintext = utilities.file_to_text('plaintext_xshift_sample.txt') ciphertext = utilities.file_to_text('ciphertext_xshift_sample.txt') key = ('ABCDEFGHIJKLMNOPQRSTUVWXYZzyxwvutsrqponmlkjihgfedcba', 30) ciphertext2 = solution.e_xshift(plaintext, key) if ciphertext == ciphertext2: print('\tEncryption Successful') else: print('\tEncryption failed') plaintext2 = solution.d_xshift(ciphertext2, key) if plaintext == plaintext2: print('\tDecryption Successful') else: print('\tDecryption failed') print() print('Cryptanalysis for Sample File:') key, plaintext = solution.cryptanalysis_xshift(ciphertext) print('found key = ', key) print() plaintext = '' ciphertext = '' ciphertext2 = '' plain4 = file1 cipher4 = file2 key = 0 ciphertext = utilities.file_to_text(cipher4) print('Cryptanalysis of {}:'.format(cipher4)) key, plaintext = solution.cryptanalysis_xshift(ciphertext) print('Key found: ', key) print() print('Plaintext:') print(plaintext[:500]) print() print('Cryptanalysis Successful? ', end='') ciphertext2 = solution.e_xshift(plaintext, (key[0], int(key[1]))) if ciphertext == ciphertext2: print('Yes') else: print('No') print() solution.comments_q3() return
def task3(): print('{}'.format('-' * 40)) print("Start of Task 3: Scytale Cipher Testing") print() print('--------- Testing Encryption:') for i in range(3, 7): plainfile = 'plaintext1' + str(i - 2) + '.txt' plaintext = utilities.file_to_text(plainfile) ciphertext = A1_solution.e_scytale(plaintext, i) print('key = {}'.format(i)) print('ciphertext: ') print(ciphertext) utilities.text_to_file(ciphertext, 'ciphertext3' + str(i - 2) + '.txt') print() print('-------- Testing Decryption: ') for i in range(3, 7): ciphertext = utilities.file_to_text('ciphertext3' + str(i - 2) + '.txt') plaintext = A1_solution.d_scytale(ciphertext, i) print('key = {}'.format(i)) print('plaintext: ') print(plaintext) print() print('-------- Testing Cryptanalysis: ') for i in range(5, 7): file = 'ciphertext3' + str(i) + '.txt' ciphertext = utilities.file_to_text(file) key, plaintext = A1_solution.cryptanalysis_scytale(ciphertext) print('key = {}'.format(key), end=' , ') if plaintext == utilities.file_to_text('plaintext31.txt'): print('Plaintext verified') else: print('Plaintext mismatch') print() print('End of Task 3: Scytale Cipher Testing') print('{}'.format('-' * 40)) print() return
def task2(): print('{}'.format('-' * 40)) print("Start of Task 2: Extended Atbash Testing") print() print('-------- Testing Encryption: ') plaintext = utilities.file_to_text('plaintext14.txt') for i in range(5): ciphertext = A1_solution.e_eatbash(plaintext, i + 5) print('key = {}'.format(i)) print('ciphertext: ') print(ciphertext) utilities.text_to_file(ciphertext, 'ciphertext2' + str(i + 1) + '.txt') print() print('-------- Testing Decryption: ') for i in range(5): ciphertext = utilities.file_to_text('ciphertext2' + str(i + 1) + '.txt') plaintext = A1_solution.d_eatbash(ciphertext, i) print('key = {}'.format(i)) print('plaintext: ') print(plaintext) print() print('-------- Testing Cryptanalysis: ') for i in range(5): file = 'ciphertext2' + str(i + 1) + '.txt' ciphertext = utilities.file_to_text(file) key, plaintext = A1_solution.cryptanalysis_eatbash(ciphertext) print('key = {}'.format(key), end=' , ') if plaintext == utilities.file_to_text('plaintext14.txt'): print('Plaintext verified') else: print('Plaintext mismatch') print() print('End of Task 2: Extended Atbash Testing') print('{}'.format('-' * 40)) print() return
def part1(): inputText = utilities.file_to_text('Day6/input.txt') groups = inputText.split('\n\n') totalSum = 0 for group in groups: customsDict = {chr(ord('a') + i): 0 for i in range(26)} for char in group: if char in customsDict: customsDict[char] = 1 totalSum += sum(customsDict.values()) print(totalSum)
def part2(): inputText = utilities.file_to_text('Day6/input.txt') groups = inputText.split('\n\n') totalSum = 0 for group in groups: customsDict = {chr(ord('a') + i): 0 for i in range(26)} lines = group.split('\n') for line in lines: for char in line: if char in customsDict: customsDict[char] += 1 for key in customsDict: if type(lines) == list: if customsDict[key] == len(lines): totalSum += 1 else: if customsDict[key] == 1: totalSum += 1 print(totalSum)
def task2(): print('{}'.format('-' * 40)) print("Start of Task 2: Block Rotation Cipher") print() print('Testing adjust Key:') print('({},{})\t--> '.format(4, 3.5), end='') print('{}'.format(A2_solution._adjust_key_block_rotate((4, 3.5)))) print('{}\t--> '.format([4, 5]), end='') print('{}'.format(A2_solution._adjust_key_block_rotate([4, 5]))) print('{}\t--> '.format(10), end='') print('{}'.format(A2_solution._adjust_key_block_rotate(10))) print('({},{})\t--> '.format(-2, 1), end='') print('{}'.format(A2_solution._adjust_key_block_rotate((-2, 1)))) print('({},{})\t--> '.format(5, 7), end='') print('{}'.format(A2_solution._adjust_key_block_rotate((5, 7)))) print('({},{})\t--> '.format(3, 11), end='') print('{}'.format(A2_solution._adjust_key_block_rotate((3, 11)))) print('({},{})\t--> '.format(7, -6), end='') print('{}'.format(A2_solution._adjust_key_block_rotate((7, -6)))) print('({},{})\t--> '.format(11, 4), end='') print('{}'.format(A2_solution._adjust_key_block_rotate((11, 4)))) print() print('Testing encryption and decryption:') key = (4, 3) print('Key = ', key) plaintext = utilities.get_base('lower') print('plaintext = ', end=' ') print(plaintext) ciphertext = A2_solution.e_block_rotate(plaintext, key) print('After encryption:', end=' ') print(ciphertext) print('After Decryption:', end=' ') recovered = A2_solution.d_block_rotate(ciphertext, key) print(recovered) print() key = (10, 6) print('Key = ', key) plaintext = 'The internet, our greatest tool of emancipation, has been transformed into ' plaintext += 'the most dangerous facilitator of totalitarianism we have ever seen' print('plaintext = ') print(plaintext) ciphertext = A2_solution.e_block_rotate(plaintext, key) print('After encryption:') print(ciphertext) print('After Decryption:') recovered = A2_solution.d_block_rotate(ciphertext, key) print(recovered) print() key = (8, 5) print('Key = ', key) plaintext = 'One must acknowledge with cryptography ' plaintext += 'no amount of violence will ever solve a math problem.' print('plaintext = ') print(plaintext) ciphertext = A2_solution.e_block_rotate(plaintext, key) print('After encryption:') print(ciphertext) print('After Decryption:') recovered = A2_solution.d_block_rotate(ciphertext, key) print(recovered) print() print('Testing Cryptanalysis: ') base_plaintext = utilities.file_to_text('plaintext1.txt') arguments = [[2, 15, 0], [0, 0, 0], [10, 0, 0], [0, 10, 0], [12, 12, 0]] for i in range(len(arguments)): filename = 'ciphertext' + str(i + 1) + '.txt' ciphertext = utilities.file_to_text(filename) key, plaintext = A2_solution.cryptanalysis_block_rotate( ciphertext, arguments[i]) if plaintext == '' and key == '': print('Cryptanalysis failed') else: print('key = {}'.format(key)) if plaintext == base_plaintext: print('plaintext validated') else: print('plaintext validation failed') print() print('End of Task 2: Block Rotation Testing') print('{}'.format('-' * 40)) print() return
def task3(): print('{}'.format('-' * 40)) print("Start of Task 3: Playfair Square Cipher") print() print('--------- Testing _format_playfair:') plaintexts = [ 'Light', 'lesson', 'door', 'floor', 'window', 'Widow', 'Are you happy?', 'What?! Angry!!', 'Wow!! That is wonderful!' ] for i in range(len(plaintexts)): print(plaintexts[i], '\t', A2_solution._format_playfair(plaintexts[i])) print() print('-------- Testing _restore_word_playfair: ') dict_list = utilities.load_dictionary('engmix.txt') words = [ 'a', 'road', 'ox', 'fox', 'anxious', 'doxr', 'exl', 'afxix', 'excesx', 'foxtbalx', 'Football', 'England' ] for word in words: print('{:8s} --> {:15s}'.format( word, A2_solution._restore_word_playfair(word, dict_list)), end='') print('{} --> {}'.format( word.upper(), A2_solution._restore_word_playfair(word.upper(), dict_list))) print() print('--------- Testing _restore_playfair:') cases = [ 'Lesxon Lightx', 'vxindovx floxrx', 'VXidovv floxr', 'Is it why or what?' ] for case in cases: print('Before: {}'.format(case)) print('After : {}'.format(A2_solution._restore_playfair(case))) print() print('-------- Testing Encryption/Decryption: ') key = utilities.get_playfair_square() for i in range(len(plaintexts)): print('plaintext = {}'.format(plaintexts[i])) ciphertext = A2_solution.e_playfair(plaintexts[i], key) print('ciphertext = {}'.format(ciphertext)) plaintext = A2_solution.d_playfair(ciphertext, key) print('plaintext = {}'.format(plaintext)) print() print('------------ Testing encrypt/decrypt over files:') plaintext = utilities.file_to_text('plaintext2.txt') ciphertext = A2_solution.e_playfair(plaintext, key) print() if ciphertext == utilities.file_to_text('ciphertext6.txt'): print('Encryption validated') else: print('Encryption validation failed') plaintext2 = A2_solution.d_playfair(ciphertext, key) if plaintext == plaintext2: print('Decryption validated') else: print('Decryption validation failed') print() print('End of Task 3: Playfair Cipher Testing') print('{}'.format('-' * 40)) print() return
def task1(): print('{}'.format('-' * 40)) print("Start of Task 1: Plaintext Detection Testing") print() dict_list = A1_solution.load_dictionary("engmix.txt") print('Testing load_dictionary:') print("Number of words starting with b = ", len(dict_list[1])) print("10th word starting with P = ", dict_list[15][9]) print("100th word starting with j = ", dict_list[9][99]) print("Last word starting with s = ", dict_list[18][-1]) print() print("Testing text_to_words:") plaintext1 = utilities.file_to_text("plaintext11.txt") word_list = A1_solution.text_to_words(plaintext1) print("plaintext1:", word_list) plaintext2 = utilities.file_to_text("plaintext12.txt") word_list = A1_solution.text_to_words(plaintext2) print("plaintext2:") print(word_list) plaintext3 = utilities.file_to_text("plaintext13.txt") word_list = A1_solution.text_to_words(plaintext3) print("plaintext3:") print(word_list) print() print("Testing analyze_text:") result = A1_solution.analyze_text(plaintext2, "engmix.txt") print("Analyzing plaintext2:", result) result = A1_solution.analyze_text(plaintext3, "engmix.txt") print("Analyzing plaintext3:", result) plaintext4 = utilities.file_to_text("plaintext14.txt") result = A1_solution.analyze_text(plaintext4, "engmix.txt") print("Analyzing plaintext4:", result) ciphertext1 = utilities.file_to_text("ciphertext11.txt") result = A1_solution.analyze_text(ciphertext1, "engmix.txt") print("Analyzing ciphertext1:", result) print() print("Testing is_plaintext:") result = A1_solution.is_plaintext(plaintext2, "engmix.txt", 0.85) print("plaintext2 (0.85):", result) result = A1_solution.is_plaintext(plaintext3, "engmix.txt", 1.1) print("plaintext3 (1.1):", result) result = A1_solution.is_plaintext(plaintext3, "engmix.txt", 0.96) print("plaintext3: (0.96)", result) result = A1_solution.is_plaintext(plaintext4, "engmix.txt", 0.91) print("plaintext4: (0.91)", result) result = A1_solution.is_plaintext(plaintext4, "engmix.txt", 0.82) print("plaintext4: (0.82)", result) result = A1_solution.is_plaintext(ciphertext1, "engmix.txt", 0.7) print("ciphertext1: (0.7)", result) print() print('End of Task 1: Plaintext Detection Testing') print('{}'.format('-' * 40)) print() return
def task4(): print('{}'.format('-' * 40)) print("Start of Task 4: Polybius Square Cipher Testing") print() print('-------- Testing get_polybius_square:') print('start = "A", size = 5: {}'.format( A1_solution.get_polybius_square('A', 5))) print('start = "R", size = 6: {}'.format( A1_solution.get_polybius_square('R', 6))) print('start = "@", size = 7: {}'.format( A1_solution.get_polybius_square('@', 7))) print('start = "A", size = 5: {}'.format( A1_solution.get_polybius_square('A', 5))) print('start = " ", size = 8: {}'.format( A1_solution.get_polybius_square(' ', 8))) print('start = "+", size = 9: {}'.format( A1_solution.get_polybius_square('+', 9))) print('start = " ", size = 10: {}'.format( A1_solution.get_polybius_square(' ', 10))) print() print('-------- Testing Encryption:') start = ['D', 'A', ' ', '+', 'B'] for i in range(1, 6): plainfile = 'plaintext4' + str(i) + '.txt' plaintext = utilities.file_to_text(plainfile) key = (start[i - 1], i + 5) ciphertext = A1_solution.e_polybius(plaintext, key) print('key = {}'.format(key)) print('ciphertext: ') print(ciphertext) utilities.text_to_file(ciphertext, 'ciphertext4' + str(i) + '.txt') print() print('-------- Testing Decryption: ') for i in range(1, 6): ciphertext = utilities.file_to_text('ciphertext4' + str(i) + '.txt') key = (start[i - 1], i + 5) plaintext = A1_solution.d_polybius(ciphertext, key) print('key = {}'.format(key)) print('plaintext: ') print(plaintext) print() print('-------- Testing Cryptanalysis: ') size = [6, 9, 8] for i in range(6, 9): file = 'ciphertext4' + str(i) + '.txt' ciphertext = utilities.file_to_text(file) key, plaintext = A1_solution.cryptanalysis_polybius( ciphertext, size[i - 6]) print('key = {} --> {}'.format( key, A1_solution.get_polybius_square(key[0], key[1])), end=' , ') if plaintext == utilities.file_to_text('plaintext46.txt'): print('Plaintext verified') else: print('Plaintext mismatch') print() print('End of Task 4: Polybius Square Cipher Testing') print('{}'.format('-' * 40)) print() return