def usedVigenere(inputFile, dictionary): best = 0 key = 0 percent = 0 #listChars = ['a','b','c','d'] listChars = ['1','2','3','4','5','6'] setDictionary = Util.setWords(dictionary) for sizeKey in range(1, len(listChars)+1): for i in itertools.product(listChars, repeat=sizeKey): print(i) tmp = DecriptFunctions.modDecVigenere(i, inputFile[0:240]) uniqueWords = Util.setWords(tmp) nWords = len(uniqueWords & setDictionary) if nWords > best: best = nWords key = i countWords = len(uniqueWords) percent = (best*100)/countWords if percent > 50: break print("\nAlgoritmo de Vigenere" "\nChave: " + str(key) + "\nTotal de palavras: " + str(countWords) + "\nTotal de palavras encontradas: " + str(best) + "\n" + str(percent) + "% de acerto" )
def cesar(fileCript, fileDecript): tmp = fileCript[0] tmp1 = fileDecript[0] #faz o calculo para identificar a chave key = (tmp - tmp1) % 256 #decifra todo o arquivo dC = DecriptFunctions.decifraCesar(key, fileCript) if dC == fileDecript: print ('A chave esta correta!') print ('Key: ' + str(key)) else: print ('A chave esta incorreta!')
def transpose(fileCript, fileDecript): result=[] key = 2 while True: result = DecriptFunctions.decifraTranspose(key, fileCript) #aplica a cifra no arquivo orifinal if key > len(fileDecript): break if result == fileDecript: #testa se o resultado da crifa com a chave é igual ao arquivo original print ('A chave esta correta!') print ('Key: ' + key) break print (key) key += 1
def vigenere(fileCript, fileDecript): cont=0 i = 0; j = 0; var = '' while True: #faz o calculo para identificar a chave key = (fileCript[i] - fileDecript[i]) % 256 var += chr(key) i += 1 dV = DecriptFunctions.decifraVigenere(var, fileCript, fileDecript) #texta se o texto decifrado e igual ao original if dV == fileDecript: print ('Key: ' + var) print ('A chave esta correta!') break
def substitution(fileCript, fileDecript): table=[] tmp = set(range(0,256)) tmp1 = bytearray(tmp) i = 0 while True: j = 0 while len(tmp) > 0: if unichr(j).encode('Latin-1') == fileDecript[i]: flag = 0 #testa se o arquivo já existe na tabela, caso não insere na tabela for k in table: temp = k.decode('Latin-1') aux = ord(temp[0]) if j == aux: flag = 1 if flag == 0: tmp1 = [j, fileCript[i]] table.append(bytearray(tmp1)) print (j) tmp.remove(j) j = 0 break j += 1 if j > len(tmp): break i += 1 if len(fileDecript) == i: #sai quando chegou ao final da entrada break if len(table) == 256: #ou quando a tabela esta completa break # pega a tabela gerada e roda o algoritmo para decifrar result = DecriptFunctions.decifraSubstituicao(table, fileCript) print ('Tabela:') for i in table: tmp1 = i.decode('Latin-1') print (tmp1) Util.display(result)
def usedTranspose(inputFile, dictionary): best = 0 key = 0 percent = 0 setDictionary = Util.setWords(dictionary) for i in range(2, 256): tmp = DecriptFunctions.moDecTranspose(i, inputFile) uniqueWords = Util.setWords(tmp) nWords = len(uniqueWords & setDictionary) print("Key: " + str(i) + " Total de palavras: " + str(nWords)) if nWords > best: best = nWords key = i countWords = len(uniqueWords) percent = (best*100)/countWords if percent >= 50: break print("\nAlgoritmo de Transpose" "\nChave: " + str(key) + "\nTotal de palavras: " + str(countWords) + "\nTotal de palavras encontradas: " + str(best) + "\n" + str(percent) + "% de acerto" )
if op == '1': #le o arquivo ent = Util.readFile("entrada.txt") key = input('Informe um caracter para a chave: ') #Chama a função de criptografia Cifra Cesar cC = CriptFunctions.cifraCesar(key, ent) #imprime a saida criptografado Util.writeFile("saidaC.txt", cC) Util.display(cC) elif op == '2': #le o arquivo ent = Util.readFile("saidaC.txt") key = input('Informe um caracter para a chave: ') #Chama a função de criptografia Cifra Cesar dC = DecriptFunctions.decifraCesar(key, ent) #imprime a saida criptografado Util.display(dC) elif op == '3': #le o arquivo fileCript = Util.readFile('arquivos/outputs/pg11.txt.enc') fileDecript = Util.readFile('arquivos/inputs/pg11.txt') #ataque a texto usando a cifra de Cesar com texto em claro SearchKeys.cesar(fileCript, fileDecript) elif op == '4': #le o arquivo cifrado fileInput = Util.readFile('arquivos/outputs/pg11.txt.enc') # le o arquivo do dicionario dictionary = Util.rFile('arquivos/inputs/pg1342.txt') # chama funcao para descoberta da chave cProfile.run('Atach.usedCesar(fileInput, dictionary)')