예제 #1
0
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)
예제 #6
0
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" )
예제 #7
0
        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)')