Найти - Пользователи
Полная версия: Как можно ускорить данный код ?
Начало » Центр помощи » Как можно ускорить данный код ?
1
xmsq13
Есть код который дешифрует шифр подбором по формуле, используя цикл подставляется ключ и полученное слово проверяется на существование в словаре на 500 к слов.
Как можно ускорить проверку ? чтобы проверить все ключи уйдет очень много часов



 import string
import numpy as np
import nuitka
from numba import njit, prange
import time
string.digits + string.ascii_letters + string.punctuation + string.digits
alph = string.ascii_uppercase
# print(encrypt('ANCIENT', '420'))  #шифрование
# print(decrypt('NHUDMOVUHB', '13'))  #расшифровывание
def algo(text, k, op):
    k *= len(text) // len(k) + 1
    return ''.join(alph[alph.index(j) + int(k[i]) * op] for i, j in enumerate(text))
def decrypt(message, key):
    return algo(message, key, -1)
def encrypt(message, key):
    return algo(message, key, 1)
word_toDecode = 'Epqv'.upper()
f = open('words.txt')
dictionary = f.readlines()
dictionary = set(word.strip().lower() for word in dictionary)
duplicate_words = []
def brute():
    for x in prange(10000000):
        s = decrypt(word_toDecode, str(x))
        if s.lower() in dictionary:
            for i in duplicate_words:
                if i == s.lower(): break
            else:
                duplicate_words.append(s.lower())
                print(s + ' Key - ' + str(x))
def start():
    cur_time = time.time()
    brute()
    end_time = time.time()
    print(end_time - cur_time)
    f.close()
start()
py.user.next
xmsq13
Как можно ускорить проверку ? чтобы проверить все ключи уйдет очень много часов
А что дано изначально? Алгоритм шифрования известен? Что известно о шифротексте?
xmsq13
py.user.next
Алгоритм шифрования - шифр Гронсфилда, о шифротексте неизвестно ничего, я подбирал ключи и полученные вариант сравнивал со словарем, типа существует ли слово которое я расшифровал. Есть ли алгоритм получше ?
py.user.next
xmsq13
Алгоритм шифрования - шифр Гронсфилда
xmsq13
Есть ли алгоритм получше ?
Для криптоанализа этого шифра нужен большой текст. Этот шифр представляет из себя смесь шифров наподобие шифра Цезаря и наподобие шифра Виженера. Поэтому просто частотный анализ не подойдёт. Шифр многоалфавитный и тд и тп.

Значит, придётся тебе искать своим способом.

У тебя медленный поиск в словаре слов. Сделай из словаря не список слов, а бинарное дерево слов и ищи в дереве. Перебирать каждый раз надо будет не 500000 слов, а log2(500000) = 18.9 слов.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB