Ejemplo n.º 1
0
def hill_2x2(text):
    matrix_list = text2matrix_2x2(group_text(text, 2))
    possible_keys = generate_keys_2x2()
    results = []
    for keys in possible_keys:
        result = []
        l = []
        for matrices in matrix_list:
            result = matrix_multiplication_2x2_2x1_undermod26(
                keys[0], matrices)
            string = matrix2text_2x1(result)
            l.append(string)
        char = ''.join(l)
        results.append([keys[1], char])

    top_score = []
    for each in results:
        score = get_english_score(each[1])
        top_score.append(score)

    howmany = 5

    for i in range(1, howmany + 1):
        highscore = sorted(top_score)[-i]
        index = top_score.index(highscore)
        if isinstance(index, int):
            print([top_score[index], results[index][0], results[index][1]])
Ejemplo n.º 2
0
def decrypt_all_trasposition(text, max_columns=7, min_colums=2, easy=False):
    outputfile = open('output.txt', 'w')
    plaintext = extract_alphabets(text)
    factors = get_factors(len(plaintext))
    factors_to_check = []
    for f in factors:
        if max_columns >= f >= min_colums:
            factors_to_check.append(f)
        else:
            pass
    results = []
    for f in factors_to_check:
        start = time.time()
        if easy:
            table = text_split_in_order(plaintext, f)
        else:
            table = groupcharactors(plaintext, f)
        for combination in generate_permutation(f):
            result = []
            arranged_table = swape_colume(table, combination)
            answer = return_to_text(arranged_table)
            scores = get_all_english_score_in_text(answer)
            score = get_english_score(answer)
            result.append(score)
            result.append(combination)
            outputfile.write(str(scores) + ", ")
            for c in combination:
                outputfile.write(str(c) + ", ")
            outputfile.write("\n")
            results.append(result)
        print('Done: ' + str(f))
        print(time.time() - start)
    return results
Ejemplo n.º 3
0
def check_map_with_keyword(text, keyword, index_e=-1, reverse=False):
    map = get_map_with_keyword(keyword)
    if index_e != -1:
        if map[4][1] != alphabets[index_e]:
            return False
    original = decrypt_mapping(text, map)
    if reverse:
        score1 = get_english_score(original)
        reversedtext = reverse_text(original)
        score2 = get_english_score(reversedtext)
        if score1 >= score2:
            result = [score1, keyword, original]
        else:
            result = [score2, keyword, reversedtext]
    else:
        result = [get_english_score(original), keyword, original]
    return result
Ejemplo n.º 4
0
def check_all_with_keyword(text, keyword, index_e=-1, reverse=False):
    maps = get_maps_with_keyword(keyword)
    results = []
    for map in maps:
        if index_e != -1:
            if map[4][1] == alphabets[index_e]:
                original = decrypt_mapping(text, map)
                if reverse:
                    original = reverse_text(original)
                score = get_english_score(original)
                # if score > 100:
                results.append([score, keyword, original])
        else:
            original = decrypt_mapping(text, map)
            if reverse:
                original = reverse_text(original)
            score = get_english_score(original)
            # if score > 100:
            results.append([score, keyword, original])
    return results
Ejemplo n.º 5
0
def decipher_vigenere_all_possible_combination_of_a(text,
                                                    k,
                                                    a_for_each,
                                                    affine=False,
                                                    reverse=False):
    list_texts = textksplit(extract_alphabets(text), k)
    all_combinations_of_a = gen_permination(a_for_each)
    answers = []
    print(len(all_combinations_of_a))
    for a_s in all_combinations_of_a:
        deciphered_texts = []
        first = True
        for i in range(len(list_texts)):
            list_text_string = ''.join(list_texts[i])
            if affine:
                if first:
                    add = [a_s[len(a_s) - 2], a_s[len(a_s) - 1]]
                    a_s = a_s[0:len(a_s) - 2]
                    a_s.append(add)
                    first = False
                answer = decrypt_mapping(
                    list_text_string,
                    get_map_of_ax_plus_b(int(a_s[i][0]), int(a_s[i][1])))
            else:
                answer = decrypt_mapping(list_text_string,
                                         get_map_of_x_plus_a(a_s[i]))
            deciphered_texts.append(answer)
        length = 0
        for deciphered_text in deciphered_texts:
            length += len(deciphered_text)
        answer = ''
        for i in range(length):
            answer += deciphered_texts[(i % k)][int((i - (i % k)) / k)]
        if not reverse:
            answers.append([get_english_score(answer), a_s, answer])
        elif reverse:
            reversed_text = reverse_text(answer)
            answers.append(
                [get_english_score(reversed_text), a_s, reversed_text])
    return answers
Ejemplo n.º 6
0
def decipher_vigenere_with_a(text, a_s):
    k = len(a_s)
    list_texts = textksplit(extract_alphabets(text), k)
    deciphered_texts = []
    for i in range(len(list_texts)):
        list_text_string = ''.join(list_texts[i])
        answer = decrypt_mapping(list_text_string, get_map_of_x_plus_a(a_s[i]))
        deciphered_texts.append(answer)
    length = 0
    for deciphered_text in deciphered_texts:
        length += len(deciphered_text)
    answer = ''
    for i in range(length):
        answer += deciphered_texts[(i % k)][int((i - (i % k)) / k)]
    answer = [get_english_score(answer), a_s, answer]
    return answer
Ejemplo n.º 7
0
def decipher_by_english_check(text):
    # x+a
    # for a in range(26):
    #     # print(a, end='  ')
    #     result = []
    #     text_decrypted = decrypt_mapping(text, get_map_of_x_plus_a(a))
    #     # print(get_all_english_score_in_text(text_decrypted))
    #     score = get_english_score(text_decrypted)
    results = []
    # ax+b
    a_possible = [1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25]
    for a in a_possible:
        for b in range(26):
            result = []
            text_decrypted = decrypt_mapping(text, get_map_of_ax_plus_b(a, b))
            score = get_english_score(text_decrypted)
            result.append(score)
            result.append([a, b])
            results.append(result)

    # Show results
    numbertop = 5
    topnumbers = []
    for i in range(numbertop):
        biggest = []
        for result in results:
            try:
                if result[0] > biggest[0]:
                    biggest = result
            except IndexError:
                biggest = result
        topnumbers.append(biggest)
        results.remove(biggest)
    print(topnumbers)
    for result in topnumbers:
        print(round(result[0], 2), end=', ')
        print("a=", end='')
        print(result[1][0], end=', ')
        print("b=", end='')
        print(result[1][1], end=', ')
        print(decrypt_mapping(text, get_map_of_ax_plus_b(result[1][0], result[1][1])))
Ejemplo n.º 8
0
def hill_climbing(text, config_dict):

    T = config_dict['T0']
    T_lowest = config_dict['T_lowest']
    NumberOfIterationPerT = config_dict['NumberOfIterationPerT']
    FunctionT = config_dict['FunctionT']
    CipherType = config_dict['CipherType']
    KeywordorGrid = config_dict['Keyword/Grid']
    LengthOfKey_lower = config_dict['LengthOfKey_lower']
    LengthOfKey_upper = config_dict['LengthOfKey_upper']
    Probability_threshold = config_dict['Probability_threshold']
    Starting_Keyword = config_dict['Starting_Keyword']
    count = 1
    e = 2.71828182846

    PlainText = re.sub(r'\W', '', text)
    if KeywordorGrid == 'grid':
        parent_keyword = generate_random_5x5grid(deleted_letter='J')
    else:
        parent_keyword = generate_random_keyword(LengthOfKey_lower,
                                                 LengthOfKey_upper,
                                                 alphabets())
        if not Starting_Keyword == '':
            parent_keyword = Starting_Keyword
    parent_score = get_english_score(CipherType(PlainText, parent_keyword))
    #print(parent_score)
    highest_score = parent_score
    all_keys = []

    while T > T_lowest:
        print(count)
        countOfinter = 0

        while countOfinter <= NumberOfIterationPerT:
            meth = random_minor_change(KeywordorGrid)
            child_keyword = meth(parent_keyword)
            #print(child_keyword)
            if child_keyword not in all_keys:
                all_keys.append(table2str(child_keyword))
                resultText = CipherType(PlainText, child_keyword)
                child_score = get_english_score(resultText)
                dF = child_score - parent_score
                #print(child_score)
                if dF >= 0:
                    displayscore = parent_score
                    parent_keyword = child_keyword
                    parent_score = child_score
                    if child_score > highest_score:
                        highest_score = child_score
                    print('#Iteration: ' + str(count) + '  Keyword: ' +
                          table2str(parent_keyword) + '  Score: ' +
                          str(child_score) + ' Highest score: ' +
                          str(highest_score) + '  Parent score:  ' +
                          str(displayscore))
                else:
                    prob = e**(dF / T)
                    if prob > Probability_threshold:
                        parent_keyword = child_keyword
                        parent_score = child_score
                        print('#Iteration: ' + str(count) + '  Keyword: ' +
                              table2str(parent_keyword) + '  Score: ' +
                              str(parent_score) + '  Highest score: ' +
                              str(highest_score) + '  Probability: ' +
                              str(prob))
                    # else:
                    #     print('#Iteration: ' + str(count) + '  Unsuccessful' + '  Probability: ' + str(prob) + ' ' + str(T) + ' ' + str(dF))

                countOfinter += 1
                count += 1

        T = FunctionT(T, count)