2016-10-21 4 views
0

Я хочу заменить текст cypher на обычный текст. Но может быть n! возможности, где n означает число символовКак кодировать перестановку подстановки

, например

высчитывать: [ a, b, c, d ]

равнина [ x, y, z, m ]

Давайте предположим, что я уверен, что один из комбинации правильно обычный текст. В этом примере я знаю, что есть 4! возможно открытый текст, но я должен вычислить его в питон, потому что в моей реальной проблеме п 10.

Я прошу кусок кода или алгоритма

+0

насколько велик ваш зашифрованный текст? если его всего 10 символов у вас будет непросто –

+0

зашифрованный текст длиной 270 символов, – eneski

ответ

1

вам нужно сделать анализ частотности. читать эту статью об этом https://inventwithpython.com/hacking/chapter20.html

есть источник существует для анализа частоты в питоне

когда вы реализуете исходный код из этого учебника вы можете написать

def test_solution(cypher,plaintext,encrypted_text): 
    tab = string.transtab(cypher,plaintext) 
    decrypted = encrypted_text.translate(tab) 
    return (englishFreqMatchScore(decrypted),plaintext, decrypted) 

tests = [test_solution(cypher,k,enc_text) for k in itertools.permutations(plain)] 
print "SOLUTION:",max(tests) 

к сведению, что это предполагает, что исходный текст будет быть английским ... частота букв будет различной для разных языков (я думаю, по крайней мере)

К сожалению, эта проблема является np hard i think ..., чтобы найти лучшее решение, которое вы должны исследовать t он все пространство решения (так как N увеличивает длину текста в виде обычного текста, он становится намного сложнее ...)

Смежные вопросы