Example #1
0
def best_key(key, pos, mx, w_func, alf, crypt):
    best_char = 0
    for i in range(len(alf)):
        key = change_key(key, pos, i, alf)
        text = vigenere.vigenere_decryption(crypt, key, alf)
        current_mx = matrix.get_reference_matrix(text, alf)
        new_w_func = objective_function(mx, current_mx)
        if new_w_func <= w_func:
            w_func = new_w_func
            best_char = i
    key = change_key(key, pos, best_char, alf)
    return key, w_func
Example #2
0
def simpson_mode():
    with open('crypt.txt', 'r') as fin:
        text = fin.read()
    l = int(input('длина ключа: '))
    with open('ot_alf.txt', 'r') as fina:
        alf_ot = fina.read()
    alf = open('alphabet.txt', 'r').read().strip()
    deltas = simpson.get_deltas(l, text, alf, alf_ot)
    keys = simpson.get_keys(deltas, alf)
    with open('answers.txt', 'w') as fout2:
        for item in keys:
            fout2.write(item + '\n')
            fout2.write(vigenere.vigenere_decryption(text, item, alf) + '\n\n\n')
Example #3
0
def main():
    op = input('1. шифрование\n2. расшифровка\n3. h0\n4. hd\n> ')
    if op == '1':
        textname = input('введите название файла\n> ')
        alph = open('alphabet.txt').read()
        key = open('key.txt').read()
        text = vigenere.del_not_alf(open(textname).read(), alph)
        crypt = vigenere.vigenere_encryption(text, key, alph)
        open('crypt.txt', 'w').write(crypt)
        print('сохранен файл: crypt.txt')
    elif op == '2':
        text = open('crypt.txt', 'r').read()
        key = open('key.txt').read().strip()
        alf = open('alphabet.txt', 'r').read()
        decrypt = vigenere.vigenere_decryption(text, key, alf)
        open('decrypt.txt', 'w').write(str(decrypt))
        print('сохранен файл: decrypt.txt')
    elif op == '3':
        textname = input('название файла\n> ')
        text = open(textname).read().lower()
        alph = open('alphabet.txt', 'r').read()
        freqs, h0 = get_h0(text, alph)

        with open('f.txt', 'w') as fout:
            for k, v in freqs:
                fout.write('{} {}\n'.format(k, v))
        with open('h0.txt', 'w') as fout:
            for k, v in h0:
                fout.write('{} {}\n'.format(k, v))

    elif op == '4':
        enc = open('crypt.txt', 'r').read()
        h0 = []
        with open('h0.txt') as f:
            for line in f:
                char, value = line[0], line[2:]
                h0.append((char, float(value)))
        alph = ''.join(map(lambda h0i: h0i[0], h0))
        n1 = int(input('введите n1\n> '))
        n2 = int(input('введите n2\n> '))

        hds = [get_hd(enc, alph, d) for d in range(n1, n2 + 1)]
        n_min, dist_min = None, 1
        for idx, hd in enumerate(hds):
            dist = get_distance(list(map(lambda xi: float(xi[1]), h0)),
                                list(map(lambda yi: yi[1], hd)))
            if dist < dist_min:
                n_min, dist_min = n1 + idx, dist
            print(n1 + idx, ':', dist)
        print('Наименьшее расстояние до H0 при d =', n_min)
Example #4
0
def finding(d, alf, crypt, mx):
    key = get_random_key(d, alf)
    text = vigenere.vigenere_decryption(crypt, key, alf)
    current_mx = matrix.get_reference_matrix(text, alf)
    w_func = objective_function(mx, current_mx)

    new_key = key
    print(new_key)
    new_key, w_func = finding_best_key(d, mx, w_func, alf, crypt, new_key)

    while new_key != key:
        print(new_key)
        key = new_key
        new_key, w_func = finding_best_key(d, mx, w_func, alf, crypt, new_key)
    return key
Example #5
0
def encrypt():
    modv = int(input('1 - зашифровать\n2 - дешифровать\n> '))
    if modv == 1:
        name = input('файл: ')
        with open(name + '.txt', 'r') as fin:
            text = fin.read()
        alf = open('alphabet.txt', 'r').read().strip()
        key = open('key.txt', 'r').read().strip()
        open('key_len.txt', 'w').write(str(len(key)))
        text = vigenere.del_not_alf(text, alf)
        crypt = vigenere.vigenere_encryption(text, key, alf)
        open('crypt.txt', 'w').write(crypt)

    if modv == 2:
        with open('crypt.txt', 'r') as fin:
            text = fin.read()
        key = open('key.txt').read().strip()
        alf = open('alphabet.txt', 'r').read().strip()
        decrypt = vigenere.vigenere_decryption(text, key, alf)
        open('decrypt.txt', 'w').write(str(decrypt))
Example #6
0
def main():
    mod = int(input('1 - подсчет индекса совпадений  \n2 - шифр Виженера'
                    '\n'))
    if mod == 1:
        mod_rand = int(input('1 - генерация случайных последовательностей'
                             '\n2 - использование готовых текстов\n'
                             '3 - готовые тексты со сдвигом\n'))
        mod_alf = int(input('1 - английский алфавит\n'
                            '2 - русский алфавит\n'))
        if mod_alf == 1:
            with open('english.txt', 'r') as fin:
                alf = fin.read()
        else:
            with open('russian.txt', 'r') as fin:
                alf = fin.read()

        if mod_rand == 1:
            l = int(input('введите длину текста: '))
            a = modify_text.gen_text(alf, l)
            with open('rand_a.txt', 'w') as finra:
                finra.write(a)
            b = modify_text.gen_text(alf, l)
            with open('rand_b.txt', 'w') as finrb:
                finrb.write(b)
            print('индекс совпадения: ' +
                  str(round(index.overlap_index(a, b), 5) * 100))

            # if mod2 == 2:
            print('средний индекс совпадения: ' +
                  str(round(index.average_overlap_index(a, b, alf), 5) * 100))

        if mod_rand == 3:
            name_a = input('файл 1: ')
            for i in range(1, 15+1):
                with open(name_a + '.txt', 'r') as fin_a:
                    a = fin_a.read()

                with open(name_a + '+' + str(i) + '.txt', 'r') as fin_b:
                    b = fin_b.read()
                a = modify_text.del_not_alf(a, alf)
                b = modify_text.del_not_alf(b, alf)

                if len(a) > len(b):
                    l = len(b)
                else:
                    l = len(a)

                if len(a) != len(b):
                    if modify_text.cut_text(a, l) != -1:
                        a = modify_text.cut_text(a, l)

                    if modify_text.cut_text(b, l) != -1:
                        b = modify_text.cut_text(b, l)

                # print(len(a))
                # print(len(b))

                print('индекс совпадения ' + name_a + ' и ' + name_a + '+' + str(i) + ': '
                      + str(round(index.overlap_index(a, b), 5) * 100))

        if mod_rand == 2:
            # l = int(input('введите длину текста: '))
            name_a = input('файл 1: ')
            name_b = input('файл 2: ')
            with open(name_a + '.txt', 'r') as fin_a:
                a = fin_a.read()

            with open(name_b + '.txt', 'r') as fin_b:
                b = fin_b.read()

            a = modify_text.del_not_alf(a, alf)
            b = modify_text.del_not_alf(b, alf)
            # может быть сделать длину равную длине меньшего текста?

            if len(a) > len(b):
                l = len(b)
            else:
                l = len(a)

            if len(a) != len(b):
                if modify_text.cut_text(a, l) != -1:
                    a = modify_text.cut_text(a, l)
                else:
                    print('длина первого текста не соответствует требованию')
                    exit()
                if modify_text.cut_text(b, l) != -1:
                    b = modify_text.cut_text(b, l)
                else:
                    print('длина второго текста не соответствует требованию')
                    exit()
                # with open(name_a + '_remade.txt', 'w') as fouta:
                #     fouta.write(str(a))
                # with open(name_b + '_remade.txt', 'w') as foutb:
                #     foutb.write(str(b))
            print(len(a))
            print(len(b))

            # mod2 = int(input('1 - индекс совпадения\n'
            #                  '2 - средний индекс совпадения\n3'))
            #
            # if mod2 == 1:
            print('индекс совпадения: ' +
                  str(round(index.overlap_index(a, b), 5) * 100))

            # if mod2 == 2:
            print('средний индекс совпадения: ' +
                  str(index.average_overlap_index(a, b, alf) * 100))

    if mod == 2:
        mod_alf = int(input('1 - английский алфавит\n'
                            '2 - русский алфавит\n'))
        if mod_alf == 1:
            with open('english.txt', 'r') as fin:
                alf = fin.read()
        else:
            with open('russian.txt', 'r') as fin:
                alf = fin.read()

        mod_vigenere = int(input('1 - зашифровать\n2 - дешифровать\n'
                                 '3 - сдвинуть текст\n4 - сдвинуть в интервале\n'))

        if mod_vigenere == 1:
            name = input('введите название файла: ')
            with open(name + '.txt', 'r') as fin:
                text = fin.read()
            key = open('key.txt').read().strip()
            # key = input('ключ: ').strip()
            # open('key.txt', 'w').write(str(key))
            text = modify_text.del_not_alf(text, alf)

            crypt = vigenere.vigenere_encryption(text, key, alf)
            open(name + 'cr.txt', 'w').write(str(crypt))

        if mod_vigenere == 2:
            name = input('введите название файла: ')
            text = open(name + '.txt', 'r').read().strip()
            key = open('key.txt').read().strip()
            decrypt = vigenere.vigenere_decryption(text, key, alf)
            open('decrypt.txt', 'w').write(str(decrypt))

        if mod_vigenere == 3:
            name = input('введите название файла: ')
            with open(name + '.txt', 'r') as fin:
                text = fin.read()
            # l = int(open('l_shift.txt', 'r').read().strip())
            l = int(input('введите сдвиг l: '))
            text = vigenere.shift(text, l)
            open(name + '+' + str(l) + '.txt', 'w').write(str(text))

        if mod_vigenere == 4:
            name = input('введите название файла: ')
            with open(name + '.txt', 'r') as fin:
                text = fin.read()
            # l = int(open('l_shift.txt', 'r').read().strip())
            l1 = int(input('введите минимальный сдвиг l min: '))
            l2 = int(input('введите максимальный сдвиг l max: '))
            for i in range(l1, l2+1):
                ans = vigenere.shift(text, i)
                open(name + '+' + str(i) + '.txt', 'w').write(str(ans))