diff --git a/LabMD_2/crack.py b/LabMD_2/crack.py index 8b13789..e083ea9 100644 --- a/LabMD_2/crack.py +++ b/LabMD_2/crack.py @@ -1 +1,48 @@ +from itertools import product as col + +def generator(key, char, length): + char_len = key.count(char) + key_piece = key[:length - char_len:] + list_keys = [key_piece + "".join(i) for i in list(col([chr(i) for i in range(65, 65 + 26)], repeat=char_len))] + return list_keys + +def vigenere(x, key): + lst_final = [] + code = list(x) + j = 0 + for i, char in enumerate(code): + if char.isalpha(): + code[i] = key[(i + j) % len(key)] + lst_final.append((ord(x[i]) - ord(code[i])) % 26) + else: + lst_final.append(ord(char)) + j -= 1 + for i, char in enumerate(code): + if char.isalpha(): + lst_final[i] = chr(lst_final[i] + 65) + else: + lst_final[i] = chr(lst_final[i]) + return ''.join(lst_final) + +phrase = "OOGNVMTNTCLUOGZSZSHTXAZGMOMEPKWDDQM" +possibleKeys = [] +with open("english.txt", "r", encoding="utf-8") as dictionary: + for key in dictionary: + possibleKeys.append(key.strip("\n")) +i = 1 +possibleAnswers = {} +answerToPossibleNr = {} +for x in possibleKeys: + print("Attempt: ", i) + i += 1 + value = 0 + decrypted = vigenere(phrase, x).replace("\n", "") + for j in possibleKeys: + if j in decrypted: + value += len(j) + possibleAnswers[x + "/" + decrypted] = value +possibleAnswers = dict(sorted(possibleAnswers.items(), key=lambda item: item[1], reverse=True)) +with open("result.txt", "w", encoding="utf-8") as file: + for x in possibleAnswers: + file.write(x + " " + str(possibleAnswers[x]) + "\n")